From aea0a1d970b8125293c8f03c60e74c9f04160379 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Thu, 4 Sep 2003 09:37:05 +0000 Subject: [PATCH 1/1] Support for "linkpath" extended keyword --- src/create.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/create.c b/src/create.c index a0c7628..b0fa1e8 100644 --- a/src/create.c +++ b/src/create.c @@ -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 */ -- 2.44.0