]> git.cworth.org Git - tar/blobdiff - src/list.c
Merge branch 'dfsg-orig' into dfsg-debian
[tar] / src / list.c
index b17f604303f60dac99f8c14f14338d0cf0091f82..c6501722ff4c0d8cbff54ee1db8b62daaf61729c 100644 (file)
@@ -136,6 +136,14 @@ read_and (void (*do_something) (void))
 
          if (!ignore_zeros_option)
            {
+
+             /* 
+              * According to POSIX tar specs, this is wrong, but on the web
+              * there are some tar specs that can trigger this, and some tar
+              * implementations create tars according to that spec.  For now,
+              * let's not be pedantic about issuing the warning.
+              */
+#if 0         
              char buf[UINTMAX_STRSIZE_BOUND];
 
              status = read_header (false);
@@ -143,6 +151,7 @@ read_and (void (*do_something) (void))
                break;
              WARN ((0, 0, _("A lone zero block at %s"),
                     STRINGIFY_BIGINT (current_block_ordinal (), buf)));
+#endif
              break;
            }
          status = prev_status;
@@ -472,11 +481,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
@@ -484,11 +493,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;
     }
@@ -505,9 +514,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')
@@ -628,7 +637,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