]> Dogcows Code - chaz/tar/blobdiff - src/create.c
Fixed deletion from the POSIX archives.
[chaz/tar] / src / create.c
index 7b7e28f19aa54cebe68b41c4d643dc47c0190ff7..b0fa1e88facdf16e8ebe5b9d10bda4e71d6fc580 100644 (file)
@@ -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 *
@@ -410,7 +420,6 @@ write_extended (union block *old_header, char type)
   union block *header, hp;
   struct tar_stat_info foo;
   size_t size;
-  size_t bufsize;
   char *p;
 
   if (extended_header.buffer || extended_header.stk == NULL)
@@ -1246,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 (&current_stat_info.link_name, link_name);
+             if (NAME_FIELD_SIZE <= strlen (link_name))
+               write_long_link (&current_stat_info);
 
              current_stat_info.stat.st_size = 0;
              header = start_header (p, &current_stat_info);
@@ -1573,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 (&current_stat_info.link_name, buffer);
+         if (size >= NAME_FIELD_SIZE)
+           write_long_link (&current_stat_info);
 
          block_ordinal = current_block_ordinal ();
          current_stat_info.stat.st_size = 0;   /* force 0 size on symlink */
This page took 0.021547 seconds and 4 git commands to generate.