Compare commits
6 Commits
release_1_
...
release_1_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49f3145092 | ||
|
|
ca8cb48d02 | ||
|
|
b4afdd0e28 | ||
|
|
6e8bca8b56 | ||
|
|
00054440c7 | ||
|
|
a2e0cd0c05 |
13
NEWS
13
NEWS
@@ -1,6 +1,17 @@
|
||||
GNU tar NEWS - User visible changes. 2013-10-05
|
||||
GNU tar NEWS - User visible changes. 2013-11-17
|
||||
Please send GNU tar bug reports to <bug-tar@gnu.org>
|
||||
|
||||
|
||||
version 1.27.1 - Sergey Poznyakoff, 2013-11-17
|
||||
|
||||
* Bug fixes
|
||||
|
||||
* Fix unquoting of file names obtained via the -T option.
|
||||
|
||||
* Fix GNU long link header timestamp (backward compatibility).
|
||||
|
||||
* Fix extracting sparse members from star archives.
|
||||
|
||||
|
||||
version 1.27 - Sergey Poznyakoff, 2013-10-05
|
||||
|
||||
|
||||
2
THANKS
2
THANKS
@@ -119,6 +119,7 @@ Danny R. Johnston danny@cs.weber.edu
|
||||
Dave Barr barr@math.psu.edu
|
||||
Dave Gentzel gentzel@nova.enet.dec.com
|
||||
Dave Gregorich dtg@ipac.caltech.edu
|
||||
David Barri japgolly@gmail.com
|
||||
David Brown davidb@davidb.org
|
||||
David J. MacKenzie djm@uunet.uu.net
|
||||
David Johnson David.W.Johnson@colorado.edu
|
||||
@@ -368,6 +369,7 @@ Neil Faulks neil@dcs.kcl.ac.uk
|
||||
Neil Jerram nj104@cus.cam.ac.uk
|
||||
Nelson H.F. Beebe beebe@math.utah.edu
|
||||
Nick Barron nikb@cix.compulink.co.uk
|
||||
Nicolas Dudebout nicolas.dudebout@gmail.com
|
||||
Noah Friedman friedman@gnu.org
|
||||
Noel Cragg noel@red-bean.com
|
||||
Norbert Kiesel norbert@rwthi3.informatik.rwth-aachen.de
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
AC_INIT([GNU tar], [1.27], [bug-tar@gnu.org])
|
||||
AC_INIT([GNU tar], [1.27.1], [bug-tar@gnu.org])
|
||||
AC_CONFIG_SRCDIR([src/tar.c])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
@@ -74,7 +74,8 @@ fi
|
||||
AC_ARG_WITH([posix-acls],
|
||||
AS_HELP_STRING([--without-posix-acls],
|
||||
[do not use POSIX.1e access control lists]),
|
||||
[with_posix_acls=no])
|
||||
[],
|
||||
[with_posix_acls=yes])
|
||||
if test "x$with_posix_acls" != "xno"; then
|
||||
AC_CHECK_HEADERS(sys/acl.h,, [with_posix_acls=no])
|
||||
for tar_acl_func in acl_get_file acl_get_fd acl_set_file acl_set_fd \
|
||||
|
||||
@@ -609,7 +609,6 @@ char *namebuf_name (namebuf_t buf, const char *name);
|
||||
void namebuf_add_dir (namebuf_t buf, const char *name);
|
||||
char *namebuf_finish (namebuf_t buf);
|
||||
|
||||
const char *tar_getcdpath (int);
|
||||
const char *tar_dirname (void);
|
||||
|
||||
/* Represent N using a signed integer I such that (uintmax_t) I == N.
|
||||
|
||||
@@ -543,7 +543,7 @@ write_gnu_long_link (struct tar_stat_info *st, const char *p, char type)
|
||||
union block *header;
|
||||
char *tmpname;
|
||||
|
||||
header = start_private_header ("././@LongLink", size, start_time.tv_sec);
|
||||
header = start_private_header ("././@LongLink", size, 0);
|
||||
uid_to_uname (0, &tmpname);
|
||||
UNAME_TO_CHARS (tmpname, header->header.uname);
|
||||
free (tmpname);
|
||||
|
||||
51
src/misc.c
51
src/misc.c
@@ -29,6 +29,8 @@
|
||||
# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
|
||||
#endif
|
||||
|
||||
static const char *tar_getcdpath (int);
|
||||
|
||||
|
||||
/* Handling strings. */
|
||||
|
||||
@@ -230,7 +232,7 @@ zap_slashes (char *name)
|
||||
|
||||
/* Normalize FILE_NAME by removing redundant slashes and "."
|
||||
components, including redundant trailing slashes.
|
||||
Leave ".." alone, as it may be significant in the presence
|
||||
Leave ".." alone, as it may be significant in the presence
|
||||
of symlinks and on platforms where "/.." != "/".
|
||||
|
||||
Destructive version: modifies its argument. */
|
||||
@@ -290,7 +292,9 @@ normalize_filename (int cdidx, const char *name)
|
||||
const char *cdpath = tar_getcdpath (cdidx);
|
||||
size_t copylen;
|
||||
bool need_separator;
|
||||
|
||||
|
||||
if (!cdpath)
|
||||
call_arg_fatal ("getcwd", ".");
|
||||
copylen = strlen (cdpath);
|
||||
need_separator = ! (DOUBLE_SLASH_IS_DISTINCT_ROOT
|
||||
&& copylen == 2 && ISSLASH (cdpath[1]));
|
||||
@@ -834,10 +838,11 @@ struct wd
|
||||
{
|
||||
/* The directory's name. */
|
||||
char const *name;
|
||||
/* "absolute" path representing this directory; in the contrast to
|
||||
/* "Absolute" path representing this directory; in the contrast to
|
||||
the real absolute pathname, it can contain /../ components (see
|
||||
normalize_filename_x for the reason of it). */
|
||||
char *abspath;
|
||||
normalize_filename_x for the reason of it). It is NULL if the
|
||||
absolute path could not be determined. */
|
||||
char *abspath;
|
||||
/* If nonzero, the file descriptor of the directory, or AT_FDCWD if
|
||||
the working directory. If zero, the directory needs to be opened
|
||||
to be used. */
|
||||
@@ -879,15 +884,13 @@ chdir_count (void)
|
||||
int
|
||||
chdir_arg (char const *dir)
|
||||
{
|
||||
char *absdir;
|
||||
|
||||
if (wd_count == wd_alloc)
|
||||
{
|
||||
if (wd_alloc == 0)
|
||||
{
|
||||
wd_alloc = 2;
|
||||
wd = xmalloc (sizeof *wd * wd_alloc);
|
||||
}
|
||||
else
|
||||
wd = x2nrealloc (wd, &wd_alloc, sizeof *wd);
|
||||
wd_alloc = 2;
|
||||
wd = x2nrealloc (wd, &wd_alloc, sizeof *wd);
|
||||
|
||||
if (! wd_count)
|
||||
{
|
||||
@@ -909,18 +912,22 @@ chdir_arg (char const *dir)
|
||||
return wd_count - 1;
|
||||
}
|
||||
|
||||
wd[wd_count].name = dir;
|
||||
/* if the given name is an absolute path, then use that path
|
||||
to represent this working directory; otherwise, construct
|
||||
a path based on the previous -C option's absolute path */
|
||||
if (IS_ABSOLUTE_FILE_NAME (wd[wd_count].name))
|
||||
wd[wd_count].abspath = xstrdup (wd[wd_count].name);
|
||||
else
|
||||
|
||||
/* If the given name is absolute, use it to represent this directory;
|
||||
otherwise, construct a name based on the previous -C option. */
|
||||
if (IS_ABSOLUTE_FILE_NAME (dir))
|
||||
absdir = xstrdup (dir);
|
||||
else if (wd[wd_count - 1].abspath)
|
||||
{
|
||||
namebuf_t nbuf = namebuf_create (wd[wd_count - 1].abspath);
|
||||
namebuf_add_dir (nbuf, wd[wd_count].name);
|
||||
wd[wd_count].abspath = namebuf_finish (nbuf);
|
||||
namebuf_add_dir (nbuf, dir);
|
||||
absdir = namebuf_finish (nbuf);
|
||||
}
|
||||
else
|
||||
absdir = 0;
|
||||
|
||||
wd[wd_count].name = dir;
|
||||
wd[wd_count].abspath = absdir;
|
||||
wd[wd_count].fd = 0;
|
||||
return wd_count++;
|
||||
}
|
||||
@@ -1007,7 +1014,7 @@ tar_dirname (void)
|
||||
chdir_args() has never been called, so we simply return the
|
||||
process's actual cwd. (Note that in this case IDX is ignored,
|
||||
since it should always be 0.) */
|
||||
const char *
|
||||
static const char *
|
||||
tar_getcdpath (int idx)
|
||||
{
|
||||
if (!wd)
|
||||
@@ -1206,7 +1213,7 @@ char *
|
||||
namebuf_finish (namebuf_t buf)
|
||||
{
|
||||
char *res = buf->buffer;
|
||||
|
||||
|
||||
if (ISSLASH (buf->buffer[buf->dir_length - 1]))
|
||||
buf->buffer[buf->dir_length] = 0;
|
||||
free (buf);
|
||||
|
||||
@@ -492,6 +492,8 @@ read_next_name (struct name_elt *ent, struct name_elt *ret)
|
||||
ent->v.file.term = 0;
|
||||
/* fall through */
|
||||
case file_list_success:
|
||||
if (unquote_option)
|
||||
unquote_string (name_buffer);
|
||||
if (handle_option (name_buffer) == 0)
|
||||
{
|
||||
name_list_adjust ();
|
||||
|
||||
@@ -809,6 +809,7 @@ star_get_sparse_info (struct tar_sparse_file *file)
|
||||
set_next_block_after (h);
|
||||
for (i = 0; i < SPARSES_IN_STAR_EXT_HEADER && rc == add_ok; i++)
|
||||
rc = oldgnu_add_sparse (file, &h->star_ext_header.sp[i]);
|
||||
file->dumped_size += BLOCKSIZE;
|
||||
}
|
||||
|
||||
if (rc == add_fail)
|
||||
|
||||
Reference in New Issue
Block a user