const char *tar_dirname (void);
/* intmax (N) is like ((intmax_t) (N)) except without a cast so
- that it is an error if N is a pointer. Similarly for uintmax. */
+ that it is an error if N is a pointer. */
COMMON_INLINE intmax_t
intmax (intmax_t n)
{
return n;
}
-COMMON_INLINE uintmax_t
-uintmax (uintmax_t n)
-{
- return n;
-}
-/* intmax should be used only with signed types, and uintmax for unsigned.
+/* intmax should be used only with signed types.
To bypass this check parenthesize the function, e.g., (intmax) (n). */
#define intmax(n) verify_expr (EXPR_SIGNED (n), (intmax) (n))
-#define uintmax(n) verify_expr (!EXPR_SIGNED (n), (uintmax) (n))
/* Represent N using a signed integer I such that (uintmax_t) I == N.
With a good optimizing compiler, this is equivalent to (intmax_t) i
{
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: