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:
Paul Eggert
2024-11-01 23:47:23 -07:00
parent 2339c9106b
commit 0aa69501d3
2 changed files with 22 additions and 16 deletions
+20 -8
View File
@@ -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: