]> Dogcows Code - chaz/tar/blobdiff - src/create.c
(delete_archive_members): Handle case of
[chaz/tar] / src / create.c
index 6f9f7e8ca291b7149251b68ef446857279cfe8e9..a0c76289e3cc773d33678910344c87fd7009c12d 100644 (file)
@@ -410,7 +410,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)
@@ -469,10 +468,16 @@ start_header (const char *name, struct tar_stat_info *st)
   union block *header;
 
   name = safer_name_suffix (name, 0);
-
+  assign_string (&st->file_name, name);
+  
   if (sizeof header->header.name <= strlen (name))
-    write_long (name, GNUTYPE_LONGNAME);
-
+    {
+      if (archive_format == POSIX_FORMAT)
+       xheader_store ("path", st);
+      else
+       write_long (name, GNUTYPE_LONGNAME);
+    }
+  
   header = find_next_block ();
   memset (header->buffer, 0, sizeof (union block));
 
@@ -629,6 +634,22 @@ finish_header (union block *header, off_t block_ordinal)
   int sum;
   char *p;
 
+  /* Note: It is important to do this before the call to write_extended(),
+     so that the actual ustar header is printed */
+  if (verbose_option
+      && header->header.typeflag != GNUTYPE_LONGLINK
+      && header->header.typeflag != GNUTYPE_LONGNAME
+      && header->header.typeflag != XHDTYPE
+      && header->header.typeflag != XGLTYPE)
+    {
+      /* These globals are parameters to print_header, sigh.  */
+
+      current_header = header;
+      /* current_stat_info is already set up.  */
+      current_format = archive_format;
+      print_header (block_ordinal);
+    }
+
   header = write_extended (header, XHDTYPE);
   
   memcpy (header->header.chksum, CHKBLANKS, sizeof header->header.chksum);
@@ -651,18 +672,6 @@ finish_header (union block *header, off_t block_ordinal)
 
   uintmax_to_chars ((uintmax_t) sum, header->header.chksum, 7);
 
-  if (verbose_option
-      && header->header.typeflag != GNUTYPE_LONGLINK
-      && header->header.typeflag != GNUTYPE_LONGNAME)
-    {
-      /* These globals are parameters to print_header, sigh.  */
-
-      current_header = header;
-      /* current_stat_info is already set up.  */
-      current_format = archive_format;
-      print_header (block_ordinal);
-    }
-
   set_next_block_after (header);
 }
 \f
This page took 0.024495 seconds and 4 git commands to generate.