diff options
Diffstat (limited to 'firmware/common')
-rw-r--r-- | firmware/common/format.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/firmware/common/format.c b/firmware/common/format.c index 2655a871c9..0fa838f511 100644 --- a/firmware/common/format.c +++ b/firmware/common/format.c | |||
@@ -42,6 +42,8 @@ int format( | |||
42 | long lval, lsign; | 42 | long lval, lsign; |
43 | unsigned int uval; | 43 | unsigned int uval; |
44 | unsigned long ulval; | 44 | unsigned long ulval; |
45 | size_t uszval; | ||
46 | ssize_t szval, szsign; | ||
45 | bool ok = true; | 47 | bool ok = true; |
46 | 48 | ||
47 | tmpbuf[sizeof tmpbuf - 1] = '\0'; | 49 | tmpbuf[sizeof tmpbuf - 1] = '\0'; |
@@ -167,6 +169,40 @@ int format( | |||
167 | 169 | ||
168 | break; | 170 | break; |
169 | 171 | ||
172 | case 'z': | ||
173 | ch = *fmt++; | ||
174 | switch(ch) { | ||
175 | case 'd': | ||
176 | szval = szsign = va_arg (ap, long); | ||
177 | if (szval < 0) | ||
178 | szval = -szval; | ||
179 | do | ||
180 | { | ||
181 | *--str = (szval % 10) + '0'; | ||
182 | szval /= 10; | ||
183 | } | ||
184 | while (szval > 0); | ||
185 | if (szsign < 0) | ||
186 | *--str = '-'; | ||
187 | break; | ||
188 | |||
189 | case 'u': | ||
190 | uszval = va_arg(ap, size_t); | ||
191 | do | ||
192 | { | ||
193 | *--str = (uszval % 10) + '0'; | ||
194 | uszval /= 10; | ||
195 | } | ||
196 | while (uszval > 0); | ||
197 | break; | ||
198 | |||
199 | default: | ||
200 | *--str = 'z'; | ||
201 | *--str = ch; | ||
202 | } | ||
203 | |||
204 | break; | ||
205 | |||
170 | default: | 206 | default: |
171 | *--str = ch; | 207 | *--str = ch; |
172 | break; | 208 | break; |