1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-05-26 20:26:31 +02:00

od -t x8' used the wrong (l'-prefixed) printf format.

Likewise for the o8 and u8 formats.

(ISPEC_TO_FORMAT): Define macro.
(decode_one_format): Use PRIdMAX, PRIoMAX, etc. for LONG_LONG.
Reported by Arun Sharma.
This commit is contained in:
Jim Meyering
2002-09-17 22:06:21 +00:00
parent 8837ed851e
commit b8da58cdac
+15 -10
View File
@@ -742,6 +742,11 @@ this system doesn't provide a %lu-byte integral type"), s_orig, size);
break;
}
#define ISPEC_TO_FORMAT(Spec, Min_format, Long_format, Max_format) \
((Spec) == LONG_LONG ? (Max_format) \
: ((Spec) == LONG ? (Long_format) \
: (Min_format))) \
#define FMT_BYTES_ALLOCATED 9
fmt_string = xmalloc (FMT_BYTES_ALLOCATED);
@@ -751,32 +756,30 @@ this system doesn't provide a %lu-byte integral type"), s_orig, size);
{
case 'd':
fmt = SIGNED_DECIMAL;
sprintf (fmt_string, " %%%u%sd",
sprintf (fmt_string, " %%%u%s",
(field_width = bytes_to_signed_dec_digits[size]),
(size_spec == LONG ? "l"
: (size_spec == LONG_LONG ? "ll"
: "")));
ISPEC_TO_FORMAT (size_spec, "d", "ld", PRIdMAX));
break;
case 'o':
fmt = OCTAL;
sprintf (fmt_string, " %%0%u%so",
sprintf (fmt_string, " %%0%u%s",
(field_width = bytes_to_oct_digits[size]),
(size_spec == LONG ? "l" : ""));
ISPEC_TO_FORMAT (size_spec, "o", "lo", PRIoMAX));
break;
case 'u':
fmt = UNSIGNED_DECIMAL;
sprintf (fmt_string, " %%%u%su",
sprintf (fmt_string, " %%%u%s",
(field_width = bytes_to_unsigned_dec_digits[size]),
(size_spec == LONG ? "l" : ""));
ISPEC_TO_FORMAT (size_spec, "u", "lu", PRIuMAX));
break;
case 'x':
fmt = HEXADECIMAL;
sprintf (fmt_string, " %%0%u%sx",
sprintf (fmt_string, " %%0%u%s",
(field_width = bytes_to_hex_digits[size]),
(size_spec == LONG ? "l" : ""));
ISPEC_TO_FORMAT (size_spec, "x", "lx", PRIxMAX));
break;
default:
@@ -1646,6 +1649,8 @@ main (int argc, char **argv)
integral_type_size[sizeof (int)] = INT;
integral_type_size[sizeof (long int)] = LONG;
#if HAVE_UNSIGNED_LONG_LONG
/* If `long' and `long long' have the same size, it's fine
to overwrite the entry for `long' with this one. */
integral_type_size[sizeof (ulonglong_t)] = LONG_LONG;
#endif