aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKévin Redon <kredon@sysmocom.de>2018-08-28 19:36:58 +0200
committerKévin Redon <kredon@sysmocom.de>2018-08-28 19:43:37 +0200
commit29200c62237594e9ce1d82e1f60298e9f0878e62 (patch)
tree3ca11bfd3afc50547c6f52d5ebea30da76a127d0
parent80d947660208d99ccd09693277a0f59924d9310b (diff)
stdio: add void 'l' format string qualifier
Wformat requires uint32_t to be used in format string with the 'l' qualifier (l = long = at least 32 bits). this qualifier was not handled before. since on ARM 32-bit int == long we can simply ignore it (stdio already does not support 64-bit data). Change-Id: Ib506a66f68712c6b3eeb5129a39abf47ec86a2a7
-rw-r--r--firmware/libcommon/source/stdio.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/firmware/libcommon/source/stdio.c b/firmware/libcommon/source/stdio.c
index 04d73f0..2bfaed7 100644
--- a/firmware/libcommon/source/stdio.c
+++ b/firmware/libcommon/source/stdio.c
@@ -350,19 +350,22 @@ signed int vsnprintf(char *pStr, size_t length, const char *pFormat, va_list ap)
}
// Parse type
- switch (*pFormat) {
- case 'd':
- case 'i': num = PutSignedInt(pStr, fill, width, va_arg(ap, signed int)); break;
- case 'u': num = PutUnsignedInt(pStr, fill, width, va_arg(ap, unsigned int)); break;
- case 'x': num = PutHexa(pStr, fill, width, 0, va_arg(ap, unsigned int)); break;
- case 'X': num = PutHexa(pStr, fill, width, 1, va_arg(ap, unsigned int)); break;
- case 's': num = PutString(pStr, va_arg(ap, char *)); break;
- case 'c': num = PutChar(pStr, va_arg(ap, unsigned int)); break;
- default:
- return EOF;
- }
-
- pFormat++;
+ do {
+ num = 0;
+ switch (*pFormat) {
+ case 'l': num = -1; break; // ignore long qualifier since int == long (and long long is not supported)
+ case 'd':
+ case 'i': num = PutSignedInt(pStr, fill, width, va_arg(ap, signed int)); break;
+ case 'u': num = PutUnsignedInt(pStr, fill, width, va_arg(ap, unsigned int)); break;
+ case 'x': num = PutHexa(pStr, fill, width, 0, va_arg(ap, unsigned int)); break;
+ case 'X': num = PutHexa(pStr, fill, width, 1, va_arg(ap, unsigned int)); break;
+ case 's': num = PutString(pStr, va_arg(ap, char *)); break;
+ case 'c': num = PutChar(pStr, va_arg(ap, unsigned int)); break;
+ default:
+ return EOF;
+ }
+ pFormat++;
+ } while (num < 0);
pStr += num;
size += num;
}