diff options
| author | Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com> | 2005-01-23 23:08:07 +0000 |
|---|---|---|
| committer | Jean-Philippe Bernardy <jeanphilippe.bernardy@gmail.com> | 2005-01-23 23:08:07 +0000 |
| commit | fc0372b209d21cb6317078f63774aa4bef6dff29 (patch) | |
| tree | c63574bd1073fcd16e003ed0d014e5a272f859bf /firmware/common/sprintf.c | |
| parent | 2e41950fcf98b4f5eee95e2e5e72681557eca585 (diff) | |
| download | rockbox-fc0372b209d21cb6317078f63774aa4bef6dff29.zip rockbox-fc0372b209d21cb6317078f63774aa4bef6dff29.tar.gz rockbox-fc0372b209d21cb6317078f63774aa4bef6dff29.tar.bz2 rockbox-fc0372b209d21cb6317078f63774aa4bef6dff29.tar.xz | |
Support for %l* plus __attribute__ printf support
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5641 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common/sprintf.c')
| -rw-r--r-- | firmware/common/sprintf.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/firmware/common/sprintf.c b/firmware/common/sprintf.c index 6542c9d..a92681e 100644 --- a/firmware/common/sprintf.c +++ b/firmware/common/sprintf.c @@ -43,7 +43,9 @@ static int format( char *str; char tmpbuf[12], pad; int ch, width, val, sign; + long lval; unsigned int uval; + unsigned long ulval; bool ok = true; tmpbuf[sizeof tmpbuf - 1] = '\0'; @@ -99,7 +101,41 @@ static int format( } while (uval); break; - + + case 'l': + ch = *fmt++; + switch(ch) { + case 'x': + case 'X': + ulval = va_arg (ap, long); + do + { + *--str = hexdigit[ulval & 0xf]; + ulval >>= 4; + } + while (ulval); + break; + case 'd': + lval = sign = va_arg (ap, long); + if (lval < 0) + lval = -lval; + do + { + *--str = (lval % 10) + '0'; + lval /= 10; + } + while (lval > 0); + if (sign < 0) + *--str = '-'; + break; + + default: + *--str = 'l'; + *--str = ch; + } + + break; + default: *--str = ch; break; |