mirror of
https://git.savannah.gnu.org/git/tar.git
synced 2026-09-05 15:56:55 +00:00
numeric-owner: print big UID/GID correctly
* src/list.c (simple_print_header): Do not parse ustar header for UID/GID again (tar_stat_info has already been correctly filled with respect to possible uid/gid extended headers). * tests/numeric.at: New testcase for --numeric-owner option. * tests/Makefile.am: Add new testcase. * tests/testsuite.at: Likewise.
This commit is contained in:
committed by
Sergey Poznyakoff
parent
b684326e69
commit
68e9ab4966
+3
-25
@@ -1,6 +1,6 @@
|
||||
/* List a tar archive, with support routines for reading a tar archive.
|
||||
|
||||
Copyright 1988, 1992-1994, 1996-2001, 2003-2007, 2010, 2012-2014 Free
|
||||
Copyright 1988, 1992-1994, 1996-2001, 2003-2007, 2010, 2012-2015 Free
|
||||
Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU tar.
|
||||
@@ -1219,18 +1219,7 @@ simple_print_header (struct tar_stat_info *st, union block *blk,
|
||||
&& !numeric_owner_option)
|
||||
user = st->uname;
|
||||
else
|
||||
{
|
||||
/* Try parsing it as an unsigned integer first, and as a
|
||||
uid_t if that fails. This method can list positive user
|
||||
ids that are too large to fit in a uid_t. */
|
||||
uintmax_t u = from_header (blk->header.uid,
|
||||
sizeof blk->header.uid, 0,
|
||||
0, UINTMAX_MAX,
|
||||
false, false);
|
||||
user = (u != -1
|
||||
? STRINGIFY_BIGINT (u, uform)
|
||||
: imaxtostr (UID_FROM_HEADER (blk->header.uid), uform));
|
||||
}
|
||||
user = STRINGIFY_BIGINT (st->stat.st_uid, uform);
|
||||
|
||||
if (st->gname
|
||||
&& st->gname[0]
|
||||
@@ -1238,18 +1227,7 @@ simple_print_header (struct tar_stat_info *st, union block *blk,
|
||||
&& !numeric_owner_option)
|
||||
group = st->gname;
|
||||
else
|
||||
{
|
||||
/* Try parsing it as an unsigned integer first, and as a
|
||||
gid_t if that fails. This method can list positive group
|
||||
ids that are too large to fit in a gid_t. */
|
||||
uintmax_t g = from_header (blk->header.gid,
|
||||
sizeof blk->header.gid, 0,
|
||||
0, UINTMAX_MAX,
|
||||
false, false);
|
||||
group = (g != -1
|
||||
? STRINGIFY_BIGINT (g, gform)
|
||||
: imaxtostr (GID_FROM_HEADER (blk->header.gid), gform));
|
||||
}
|
||||
group = STRINGIFY_BIGINT (st->stat.st_gid, gform);
|
||||
|
||||
/* Format the file size or major/minor device numbers. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user