projects
/
debian
/
tar
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Import upstream version 1.29
[debian/tar]
/
src
/
compare.c
diff --git
a/src/compare.c
b/src/compare.c
index d29cfdd4822f683dec5c7dfb8dc01544c62330ce..3f91279bde0930c451296560452c28de9eb7850c 100644
(file)
--- a/
src/compare.c
+++ b/
src/compare.c
@@
-1,7
+1,7
@@
/* Diff files from a tar archive.
Copyright 1988, 1992-1994, 1996-1997, 1999-2001, 2003-2007,
/* Diff files from a tar archive.
Copyright 1988, 1992-1994, 1996-1997, 1999-2001, 2003-2007,
- 2009-2010, 2012-2014 Free Software Foundation, Inc.
+ 2009-2010, 2012-2014
, 2016
Free Software Foundation, Inc.
This file is part of GNU tar.
This file is part of GNU tar.
@@
-270,11
+270,12
@@
diff_link (void)
static void
diff_symlink (void)
{
static void
diff_symlink (void)
{
+ char buf[1024];
size_t len = strlen (current_stat_info.link_name);
size_t len = strlen (current_stat_info.link_name);
- char *linkbuf =
alloca
(len + 1);
+ char *linkbuf =
len < sizeof buf ? buf : xmalloc
(len + 1);
-
in
t status = readlinkat (chdir_fd, current_stat_info.file_name,
- linkbuf, len + 1);
+
ssize_
t status = readlinkat (chdir_fd, current_stat_info.file_name,
+
linkbuf, len + 1);
if (status < 0)
{
if (status < 0)
{
@@
-285,8
+286,11
@@
diff_symlink (void)
report_difference (¤t_stat_info, NULL);
}
else if (status != len
report_difference (¤t_stat_info, NULL);
}
else if (status != len
- ||
strn
cmp (current_stat_info.link_name, linkbuf, len) != 0)
+ ||
mem
cmp (current_stat_info.link_name, linkbuf, len) != 0)
report_difference (¤t_stat_info, _("Symlink differs"));
report_difference (¤t_stat_info, _("Symlink differs"));
+
+ if (linkbuf != buf)
+ free (linkbuf);
}
#endif
}
#endif