[PATCH] fix invalid printf format strings
Rich Felker
dalias at aerifal.cx
Fri Mar 24 18:37:29 UTC 2006
The attached patch changes all occurrances of %L[diouxX] to use %ll
instead, conforming to C99 and SUSv3. The %L width specifier was
intended only for use with floating types (for long double), not long
long, and its behavior with integer types is unspecified.
Rich
-------------- next part --------------
Index: networking/interface.c
===================================================================
--- networking/interface.c (revision 14622)
+++ networking/interface.c (working copy)
@@ -1038,23 +1038,23 @@
* args. */
/* static const char * const ss_fmt[] = { */
-/* "%Ln%Lu%lu%lu%lu%lu%ln%ln%Ln%Lu%lu%lu%lu%lu%lu", */
-/* "%Lu%Lu%lu%lu%lu%lu%ln%ln%Lu%Lu%lu%lu%lu%lu%lu", */
-/* "%Lu%Lu%lu%lu%lu%lu%lu%lu%Lu%Lu%lu%lu%lu%lu%lu%lu" */
+/* "%lln%llu%lu%lu%lu%lu%ln%ln%lln%llu%lu%lu%lu%lu%lu", */
+/* "%llu%llu%lu%lu%lu%lu%ln%ln%llu%llu%lu%lu%lu%lu%lu", */
+/* "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu" */
/* }; */
/* Lie about the size of the int pointed to for %n. */
#if INT_MAX == LONG_MAX
static const char * const ss_fmt[] = {
- "%n%Lu%u%u%u%u%n%n%n%Lu%u%u%u%u%u",
- "%Lu%Lu%u%u%u%u%n%n%Lu%Lu%u%u%u%u%u",
- "%Lu%Lu%u%u%u%u%u%u%Lu%Lu%u%u%u%u%u%u"
+ "%n%llu%u%u%u%u%n%n%n%llu%u%u%u%u%u",
+ "%llu%llu%u%u%u%u%n%n%llu%llu%u%u%u%u%u",
+ "%llu%llu%u%u%u%u%u%u%llu%llu%u%u%u%u%u%u"
};
#else
static const char * const ss_fmt[] = {
- "%n%Lu%lu%lu%lu%lu%n%n%n%Lu%lu%lu%lu%lu%lu",
- "%Lu%Lu%lu%lu%lu%lu%n%n%Lu%Lu%lu%lu%lu%lu%lu",
- "%Lu%Lu%lu%lu%lu%lu%lu%lu%Lu%Lu%lu%lu%lu%lu%lu%lu"
+ "%n%llu%lu%lu%lu%lu%n%n%n%llu%lu%lu%lu%lu%lu",
+ "%llu%llu%lu%lu%lu%lu%n%n%llu%llu%lu%lu%lu%lu%lu",
+ "%llu%llu%lu%lu%lu%lu%lu%lu%llu%llu%lu%lu%lu%lu%lu%lu"
};
#endif
@@ -1748,7 +1748,7 @@
#endif
} while (i);
- printf("X bytes:%Lu (%Lu.%u %sB)%s", ull, int_part, frac_part, ext, end);
+ printf("X bytes:%llu (%llu.%u %sB)%s", ull, int_part, frac_part, ext, end);
}
static const char * const ife_print_flags_strs[] = {
@@ -1989,7 +1989,7 @@
*/
printf(" ");
- printf(_("RX packets:%Lu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"),
+ printf(_("RX packets:%llu errors:%lu dropped:%lu overruns:%lu frame:%lu\n"),
ptr->stats.rx_packets, ptr->stats.rx_errors,
ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors,
ptr->stats.rx_frame_errors);
@@ -1997,7 +1997,7 @@
printf(_(" compressed:%lu\n"),
ptr->stats.rx_compressed);
printf(" ");
- printf(_("TX packets:%Lu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"),
+ printf(_("TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"),
ptr->stats.tx_packets, ptr->stats.tx_errors,
ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors,
ptr->stats.tx_carrier_errors);
Index: coreutils/stat.c
===================================================================
--- coreutils/stat.c (revision 14622)
+++ coreutils/stat.c (working copy)
@@ -400,7 +400,7 @@
#else
format = (flags & OPT_TERSE
- ? "%s %Lx %lu "
+ ? "%s %llx %lu "
: " File: \"%s\"\n"
" ID: %-8Lx Namelen: %-7lu ");
printf(format,
Index: libbb/human_readable.c
===================================================================
--- libbb/human_readable.c (revision 14622)
+++ libbb/human_readable.c (working copy)
@@ -33,8 +33,8 @@
{
/* The code will adjust for additional (appended) units. */
static const char zero_and_units[] = { '0', 0, 'k', 'M', 'G', 'T' };
- static const char fmt[] = "%Lu";
- static const char fmt_tenths[] = "%Lu.%d%c";
+ static const char fmt[] = "%llu";
+ static const char fmt_tenths[] = "%llu.%d%c";
static char str[21]; /* Sufficient for 64 bit unsigned integers. */
@@ -74,7 +74,7 @@
if ( frac >= 5 ) {
++val;
}
- f = "%Lu%*c" /* fmt_no_tenths */ ;
+ f = "%llu%*c" /* fmt_no_tenths */ ;
frac = 1;
}
#endif
Index: e2fsprogs/blkid/blkid_getsize.c
===================================================================
--- e2fsprogs/blkid/blkid_getsize.c (revision 14622)
+++ e2fsprogs/blkid/blkid_getsize.c (working copy)
@@ -173,7 +173,7 @@
perror(argv[0]);
bytes = blkid_get_dev_size(fd);
- printf("Device %s has %Ld 1k blocks.\n", argv[1], bytes >> 10);
+ printf("Device %s has %lld 1k blocks.\n", argv[1], bytes >> 10);
return 0;
}
More information about the busybox
mailing list