[PATCH] mtd-utils: fix wrong format specifiers on mips32

Mathias Kresin dev at kresin.me
Sun Jun 12 03:05:45 PDT 2016


This patch fixes the follwing compiler warnings:

flash_erase.c: In function 'show_progress':
flash_erase.c:56:22: warning: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'off_t {aka long long int}' [-Wformat=]
  bareverbose(!quiet, "\rErasing %d Kibyte @ %"PRIxoff_t" -- %2i %% complete ",
                      ^
./include/common.h:81:10: note: in definition of macro 'bareverbose'
   printf(fmt, ##__VA_ARGS__);

which are linked to the following buggy numerical output:

Erasing 128 Kibyte @ 0 -- 917504 % complete flash_erase:  Cleanmarker written at 0
Erasing 128 Kibyte @ 0 -- 1048576 % complete flash_erase:  Cleanmarker written at 0

Signed-off-by: Mathias Kresin <dev at kresin.me>

---

In case it might be relevant, I'm cross compiling the mtd-utils on
ubuntu 14.04 x64 using a patched GCC 5.3.0 from the lede project. The
kernel version used on the mips32 target is 4.4.12.

 include/common.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/common.h b/include/common.h
index 8cb3142..ca4c62e 100644
--- a/include/common.h
+++ b/include/common.h
@@ -72,8 +72,13 @@ extern "C" {
 #define PRIxoff_t PRIx64
 #define PRIdoff_t PRId64
 #else
+#if (SIZEOF_LONG >= 8)
 #define PRIxoff_t "l"PRIx32
 #define PRIdoff_t "l"PRId32
+#else
+#define PRIxoff_t "ll"PRIx32
+#define PRIdoff_t "ll"PRId32
+#endif
 #endif
 
 /* Verbose messages */
-- 
1.9.1




More information about the linux-mtd mailing list