mirror of
https://git.savannah.gnu.org/git/tar.git
synced 2026-08-28 03:46:04 +00:00
Support for "linkpath" extended keyword
This commit is contained in:
+14
-4
@@ -402,6 +402,16 @@ write_long (const char *p, char type)
|
||||
set_next_block_after (header + (size - 1) / BLOCKSIZE);
|
||||
}
|
||||
|
||||
/* Write a long link name, depending on the current archive format */
|
||||
static void
|
||||
write_long_link (struct tar_stat_info *st)
|
||||
{
|
||||
if (archive_format == POSIX_FORMAT)
|
||||
xheader_store ("linkpath", st);
|
||||
else
|
||||
write_long (st->link_name, GNUTYPE_LONGNAME);
|
||||
}
|
||||
|
||||
/* NOTE: Cross recursion between start_header and write_extended */
|
||||
|
||||
static union block *
|
||||
@@ -1245,9 +1255,9 @@ dump_file (char *p, int top_level, dev_t parent_device)
|
||||
dup->nlink--;
|
||||
|
||||
block_ordinal = current_block_ordinal ();
|
||||
if (NAME_FIELD_SIZE <= strlen (link_name))
|
||||
write_long (link_name, GNUTYPE_LONGLINK);
|
||||
assign_string (¤t_stat_info.link_name, link_name);
|
||||
if (NAME_FIELD_SIZE <= strlen (link_name))
|
||||
write_long_link (¤t_stat_info);
|
||||
|
||||
current_stat_info.stat.st_size = 0;
|
||||
header = start_header (p, ¤t_stat_info);
|
||||
@@ -1572,9 +1582,9 @@ dump_file (char *p, int top_level, dev_t parent_device)
|
||||
return;
|
||||
}
|
||||
buffer[size] = '\0';
|
||||
if (size >= NAME_FIELD_SIZE)
|
||||
write_long (buffer, GNUTYPE_LONGLINK);
|
||||
assign_string (¤t_stat_info.link_name, buffer);
|
||||
if (size >= NAME_FIELD_SIZE)
|
||||
write_long_link (¤t_stat_info);
|
||||
|
||||
block_ordinal = current_block_ordinal ();
|
||||
current_stat_info.stat.st_size = 0; /* force 0 size on symlink */
|
||||
|
||||
Reference in New Issue
Block a user