mirror of
https://git.savannah.gnu.org/git/tar.git
synced 2026-08-18 15:26:05 +00:00
Remove major, minor signedness assumption
* src/common.h (uintmax): Remove; no longer used. * src/list.c (simple_print_header): Don’t assume major and minor agree in signedness.
This commit is contained in:
+20
-8
@@ -1228,14 +1228,26 @@ simple_print_header (struct tar_stat_info *st, union block *blk,
|
||||
{
|
||||
case CHRTYPE:
|
||||
case BLKTYPE:
|
||||
sizelen = ((EXPR_SIGNED (major (st->stat.st_rdev))
|
||||
&& EXPR_SIGNED (minor (st->stat.st_rdev)))
|
||||
? sprintf (size, "%jd,%jd",
|
||||
(intmax) (major (st->stat.st_rdev)),
|
||||
(intmax) (minor (st->stat.st_rdev)))
|
||||
: sprintf (size, "%ju,%ju",
|
||||
(uintmax) (major (st->stat.st_rdev)),
|
||||
(uintmax) (minor (st->stat.st_rdev))));
|
||||
if (EXPR_SIGNED (major (st->stat.st_rdev)))
|
||||
{
|
||||
intmax_t m = major (st->stat.st_rdev);
|
||||
sizelen = sprintf (size, "%jd", m);
|
||||
}
|
||||
else
|
||||
{
|
||||
uintmax_t m = major (st->stat.st_rdev);
|
||||
sizelen = sprintf (size, "%ju", m);
|
||||
}
|
||||
if (EXPR_SIGNED (minor (st->stat.st_rdev)))
|
||||
{
|
||||
intmax_t m = minor (st->stat.st_rdev);
|
||||
sizelen += sprintf (size + sizelen, ",%jd", m);
|
||||
}
|
||||
else
|
||||
{
|
||||
uintmax_t m = minor (st->stat.st_rdev);
|
||||
sizelen += sprintf (size + sizelen, ",%ju", m);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user