diff options
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 6542c9d993..a92681e736 100644 --- a/firmware/common/sprintf.c +++ b/firmware/common/sprintf.c | |||
@@ -43,7 +43,9 @@ static int format( | |||
43 | char *str; | 43 | char *str; |
44 | char tmpbuf[12], pad; | 44 | char tmpbuf[12], pad; |
45 | int ch, width, val, sign; | 45 | int ch, width, val, sign; |
46 | long lval; | ||
46 | unsigned int uval; | 47 | unsigned int uval; |
48 | unsigned long ulval; | ||
47 | bool ok = true; | 49 | bool ok = true; |
48 | 50 | ||
49 | tmpbuf[sizeof tmpbuf - 1] = '\0'; | 51 | tmpbuf[sizeof tmpbuf - 1] = '\0'; |
@@ -99,7 +101,41 @@ static int format( | |||
99 | } | 101 | } |
100 | while (uval); | 102 | while (uval); |
101 | break; | 103 | break; |
102 | 104 | ||
105 | case 'l': | ||
106 | ch = *fmt++; | ||
107 | switch(ch) { | ||
108 | case 'x': | ||
109 | case 'X': | ||
110 | ulval = va_arg (ap, long); | ||
111 | do | ||
112 | { | ||
113 | *--str = hexdigit[ulval & 0xf]; | ||
114 | ulval >>= 4; | ||
115 | } | ||
116 | while (ulval); | ||
117 | break; | ||
118 | case 'd': | ||
119 | lval = sign = va_arg (ap, long); | ||
120 | if (lval < 0) | ||
121 | lval = -lval; | ||
122 | do | ||
123 | { | ||
124 | *--str = (lval % 10) + '0'; | ||
125 | lval /= 10; | ||
126 | } | ||
127 | while (lval > 0); | ||
128 | if (sign < 0) | ||
129 | *--str = '-'; | ||
130 | break; | ||
131 | |||
132 | default: | ||
133 | *--str = 'l'; | ||
134 | *--str = ch; | ||
135 | } | ||
136 | |||
137 | break; | ||
138 | |||
103 | default: | 139 | default: |
104 | *--str = ch; | 140 | *--str = ch; |
105 | break; | 141 | break; |