/* POSIX requires that the size be printed without a sign, even
when negative. Assume the typical case where negative sizes
are actually positive values that have wrapped around. */
- if (sizeof f->stat.st_size < sizeof size)
- size += ((uintmax_t) (f->stat.st_size < 0)
- << (sizeof f->stat.st_size * CHAR_BIT
- /* This final term has no effect other than to suppress
- a warning about the shift count being larger than the
- width of the type. */
- * (sizeof f->stat.st_size < sizeof size)));
+ size += (f->stat.st_size < 0) * ((uintmax_t) OFF_T_MAX - OFF_T_MIN + 1);
sprintf (p, "%8s ",
human_readable (size, hbuf, 1,