]> Dogcows Code - chaz/tar/blobdiff - src/list.c
tar: use more-accurate diagnostic when intermediate mkdir fails
[chaz/tar] / src / list.c
index 9184beab739f70631c371a517b0c119af001e781..d15653d3b39530a2fd27caa8ec1fa0519d1e9d87 100644 (file)
@@ -35,6 +35,20 @@ size_t recent_long_name_blocks;      /* number of blocks in recent_long_name */
 size_t recent_long_link_blocks;        /* likewise, for long link */
 union block *recent_global_header; /* Recent global header block */
 
+#define GID_FROM_HEADER(where) gid_from_header (where, sizeof (where))
+#define MAJOR_FROM_HEADER(where) major_from_header (where, sizeof (where))
+#define MINOR_FROM_HEADER(where) minor_from_header (where, sizeof (where))
+#define MODE_FROM_HEADER(where, hbits) \
+  mode_from_header (where, sizeof (where), hbits)
+#define TIME_FROM_HEADER(where) time_from_header (where, sizeof (where))
+#define UID_FROM_HEADER(where) uid_from_header (where, sizeof (where))
+
+static gid_t gid_from_header (const char *buf, size_t size);
+static major_t major_from_header (const char *buf, size_t size);
+static minor_t minor_from_header (const char *buf, size_t size);
+static mode_t mode_from_header (const char *buf, size_t size, unsigned *hbits);
+static time_t time_from_header (const char *buf, size_t size);
+static uid_t uid_from_header (const char *buf, size_t size);
 static uintmax_t from_header (const char *, size_t, const char *,
                              uintmax_t, uintmax_t, bool, bool);
 
@@ -516,7 +530,7 @@ decode_xform (char *file_name, void *data)
   return file_name;
 }
 
-bool
+static bool
 transform_member_name (char **pinput, int type)
 {
   return transform_name_fp (pinput, type, decode_xform, &type);
@@ -642,6 +656,10 @@ decode_header (union block *header, struct tar_stat_info *stat_info,
        stat_info->is_dumpdir = true;
     }
 
+  if (header->header.typeflag == GNUTYPE_VOLHDR)
+    /* Name transformations don't apply to volume headers. */
+    return;
+  
   transform_member_name (&stat_info->file_name, XFORM_REGFILE);
   switch (header->header.typeflag)
     {
@@ -874,7 +892,7 @@ from_header (char const *where0, size_t digs, char const *type,
   return -1;
 }
 
-gid_t
+static gid_t
 gid_from_header (const char *p, size_t s)
 {
   return from_header (p, s, "gid_t",
@@ -883,7 +901,7 @@ gid_from_header (const char *p, size_t s)
                      false, false);
 }
 
-major_t
+static major_t
 major_from_header (const char *p, size_t s)
 {
   return from_header (p, s, "major_t",
@@ -891,7 +909,7 @@ major_from_header (const char *p, size_t s)
                      (uintmax_t) TYPE_MAXIMUM (major_t), false, false);
 }
 
-minor_t
+static minor_t
 minor_from_header (const char *p, size_t s)
 {
   return from_header (p, s, "minor_t",
@@ -901,7 +919,7 @@ minor_from_header (const char *p, size_t s)
 
 /* Convert P to the file mode, as understood by tar.
    Store unrecognized mode bits (from 10th up) in HBITS. */
-mode_t
+static mode_t
 mode_from_header (const char *p, size_t s, unsigned *hbits)
 {
   unsigned u = from_header (p, s, "mode_t",
@@ -932,14 +950,7 @@ off_from_header (const char *p, size_t s)
                      (uintmax_t) TYPE_MAXIMUM (off_t), false, false);
 }
 
-size_t
-size_from_header (const char *p, size_t s)
-{
-  return from_header (p, s, "size_t", (uintmax_t) 0,
-                     (uintmax_t) TYPE_MAXIMUM (size_t), false, false);
-}
-
-time_t
+static time_t
 time_from_header (const char *p, size_t s)
 {
   return from_header (p, s, "time_t",
@@ -947,7 +958,7 @@ time_from_header (const char *p, size_t s)
                      (uintmax_t) TYPE_MAXIMUM (time_t), false, false);
 }
 
-uid_t
+static uid_t
 uid_from_header (const char *p, size_t s)
 {
   return from_header (p, s, "uid_t",
This page took 0.0252 seconds and 4 git commands to generate.