]> Dogcows Code - chaz/tar/blobdiff - src/list.c
Handle Solaris 'X' type flag
[chaz/tar] / src / list.c
index baee9e88b493d23993e5e44194e1737e682517fd..bdb3ca378e400ecd0cafb0e3c2e1f0e9cffdf106 100644 (file)
@@ -222,7 +222,7 @@ list_archive (void)
       set_next_block_after (current_header);
       if (multi_volume_option)
        {
-         assign_string (&save_name, current_stat_info.file_name);
+         assign_string (&save_name, current_stat_info.orig_file_name);
          save_totsize = current_stat_info.stat.st_size;
        }
       for (size = current_stat_info.stat.st_size; size > 0; size -= written)
@@ -258,7 +258,7 @@ list_archive (void)
     }
 
   if (multi_volume_option)
-    assign_string (&save_name, current_stat_info.file_name);
+    assign_string (&save_name, current_stat_info.orig_file_name);
 
   skip_member ();
 
@@ -369,7 +369,8 @@ read_header (bool raw_extended_headers)
       if (header->header.typeflag == GNUTYPE_LONGNAME
          || header->header.typeflag == GNUTYPE_LONGLINK
          || header->header.typeflag == XHDTYPE
-         || header->header.typeflag == XGLTYPE)
+         || header->header.typeflag == XGLTYPE
+         || header->header.typeflag == SOLARIS_XHDTYPE)
        {
          if (raw_extended_headers)
            return HEADER_SUCCESS_EXTENDED;
@@ -427,7 +428,8 @@ read_header (bool raw_extended_headers)
 
              *bp = '\0';
            }
-         else if (header->header.typeflag == XHDTYPE)
+         else if (header->header.typeflag == XHDTYPE
+                  || header->header.typeflag == SOLARIS_XHDTYPE)
            xheader_read (header, OFF_FROM_HEADER (header->header.size));
          else if (header->header.typeflag == XGLTYPE)
            {
@@ -1098,7 +1100,9 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
 
       /* User and group names.  */
 
-      if (st->uname && current_format != V7_FORMAT
+      if (st->uname
+         && st->uname[0]
+         && current_format != V7_FORMAT
          && !numeric_owner_option)
        user = st->uname;
       else
@@ -1121,7 +1125,9 @@ print_header (struct tar_stat_info *st, off_t block_ordinal)
            }
        }
 
-      if (st->gname && current_format != V7_FORMAT
+      if (st->gname
+         && st->gname[0]
+         && current_format != V7_FORMAT
          && !numeric_owner_option)
        group = st->gname;
       else
@@ -1305,7 +1311,7 @@ skip_member (void)
   char save_typeflag = current_header->header.typeflag;
   set_next_block_after (current_header);
 
-  assign_string (&save_name, current_stat_info.file_name);
+  assign_string (&save_name, current_stat_info.orig_file_name);
 
   if (current_stat_info.is_sparse)
     sparse_skip_file (&current_stat_info);
This page took 0.023569 seconds and 4 git commands to generate.