]> git.cworth.org Git - tar/blobdiff - src/list.c
maybe_backup_file: Clear previously-set after_backup_name
[tar] / src / list.c
index 93de630d7d27e76558656f257e549dfcc7809c16..126a3c1fb8b2732a5fefe724bceb21e41fb3376b 100644 (file)
@@ -136,7 +136,11 @@ read_and (void (*do_something) (void))
 
          if (!ignore_zeros_option)
            {
+             char buf[UINTMAX_STRSIZE_BOUND];
 
+             status = read_header (false);
+             if (status == HEADER_ZERO_BLOCK)
+               break;
              /* 
               * According to POSIX tar specs, this is wrong, but on the web
               * there are some tar specs that can trigger this, and some tar
@@ -144,11 +148,6 @@ read_and (void (*do_something) (void))
               * let's not be pedantic about issuing the warning.
               */
 #if 0         
-             char buf[UINTMAX_STRSIZE_BOUND];
-
-             status = read_header (false);
-             if (status == HEADER_ZERO_BLOCK)
-               break;
              WARN ((0, 0, _("A lone zero block at %s"),
                     STRINGIFY_BIGINT (current_block_ordinal (), buf)));
 #endif
@@ -481,11 +480,11 @@ read_header (bool raw_extended_headers)
 static char *
 decode_xform (char *file_name, void *data)
 {
-  xform_type type = *(xform_type*)data;
+  int type = *(int*)data;
 
   switch (type)
     {
-    case xform_symlink:
+    case XFORM_SYMLINK:
       /* FIXME: It is not quite clear how and to which extent are the symbolic
         links subject to filename transformation.  In the absence of another
         solution, symbolic links are exempt from component stripping and
@@ -493,11 +492,11 @@ decode_xform (char *file_name, void *data)
         proper. */ 
       return file_name;
       
-    case xform_link:
+    case XFORM_LINK:
       file_name = safer_name_suffix (file_name, true, absolute_names_option);
       break;
       
-    case xform_regfile:
+    case XFORM_REGFILE:
       file_name = safer_name_suffix (file_name, false, absolute_names_option);
       break;
     }
@@ -514,9 +513,9 @@ decode_xform (char *file_name, void *data)
 }
 
 bool
-transform_member_name (char **pinput, xform_type type)
+transform_member_name (char **pinput, int type)
 {
-  return transform_name_fp (pinput, decode_xform, &type);
+  return transform_name_fp (pinput, type, decode_xform, &type);
 }
 
 #define ISOCTAL(c) ((c)>='0'&&(c)<='7')
@@ -637,7 +636,16 @@ decode_header (union block *header, struct tar_stat_info *stat_info,
        stat_info->is_dumpdir = true;
     }
 
-  transform_member_name (&stat_info->file_name, xform_regfile);
+  transform_member_name (&stat_info->file_name, XFORM_REGFILE);
+  switch (header->header.typeflag)
+    {
+    case SYMTYPE:
+      transform_member_name (&stat_info->link_name, XFORM_SYMLINK);
+      break;
+      
+    case LNKTYPE:
+      transform_member_name (&stat_info->link_name, XFORM_LINK);
+    }
 }
 
 /* Convert buffer at WHERE0 of size DIGS from external format to