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);
return file_name;
}
-bool
+static bool
transform_member_name (char **pinput, int type)
{
return transform_name_fp (pinput, type, decode_xform, &type);
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)
{
return -1;
}
-gid_t
+static gid_t
gid_from_header (const char *p, size_t s)
{
return from_header (p, s, "gid_t",
false, false);
}
-major_t
+static major_t
major_from_header (const char *p, size_t s)
{
return from_header (p, s, "major_t",
(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",
/* 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",
(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",
(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",
{
union block *x;
- /* FIXME: Make sure mv_begin is always called before it */
+ /* FIXME: Make sure mv_begin_read is always called before it */
if (seekable_archive)
{
char save_typeflag = current_header->header.typeflag;
set_next_block_after (current_header);
- mv_begin (¤t_stat_info);
+ mv_begin_read (¤t_stat_info);
if (current_stat_info.is_sparse)
sparse_skip_file (¤t_stat_info);