@@ -244,6 +244,38 @@ int get_int(const char **fmt, va_list *ap)
244
244
return 0 ;
245
245
}
246
246
247
+ static
248
+ unsigned long long get_number (int sign , int qualifier , va_list * ap )
249
+ {
250
+ if (sign ) {
251
+ switch (qualifier ) {
252
+ case 'L' :
253
+ return va_arg (* ap , long long );
254
+ case 'l' :
255
+ return va_arg (* ap , long );
256
+ case 'h' :
257
+ return (short )va_arg (* ap , int );
258
+ case 'H' :
259
+ return (signed char )va_arg (* ap , int );
260
+ default :
261
+ return va_arg (* ap , int );
262
+ };
263
+ } else {
264
+ switch (qualifier ) {
265
+ case 'L' :
266
+ return va_arg (* ap , unsigned long long);
267
+ case 'l' :
268
+ return va_arg (* ap , unsigned long );
269
+ case 'h' :
270
+ return (unsigned short )va_arg (* ap , int );
271
+ case 'H' :
272
+ return (unsigned char )va_arg (* ap , int );
273
+ default :
274
+ return va_arg (* ap , unsigned int );
275
+ }
276
+ }
277
+ }
278
+
247
279
int vsprintf (char * buf , const char * fmt , va_list ap )
248
280
{
249
281
int len ;
@@ -370,40 +402,8 @@ int vsprintf(char *buf, const char *fmt, va_list ap)
370
402
}
371
403
if (* fmt == 'p' ) {
372
404
num = (unsigned long )va_arg (args , void * );
373
- } else if (flags & SIGN ) {
374
- switch (qualifier ) {
375
- case 'L' :
376
- num = va_arg (args , long long );
377
- break ;
378
- case 'l' :
379
- num = va_arg (args , long );
380
- break ;
381
- case 'h' :
382
- num = (short )va_arg (args , int );
383
- break ;
384
- case 'H' :
385
- num = (signed char )va_arg (args , int );
386
- break ;
387
- default :
388
- num = va_arg (args , int );
389
- }
390
405
} else {
391
- switch (qualifier ) {
392
- case 'L' :
393
- num = va_arg (args , unsigned long long);
394
- break ;
395
- case 'l' :
396
- num = va_arg (args , unsigned long );
397
- break ;
398
- case 'h' :
399
- num = (unsigned short )va_arg (args , int );
400
- break ;
401
- case 'H' :
402
- num = (unsigned char )va_arg (args , int );
403
- break ;
404
- default :
405
- num = va_arg (args , unsigned int );
406
- }
406
+ num = get_number (flags & SIGN , qualifier , & args );
407
407
}
408
408
str = number (str , num , base , field_width , precision , flags );
409
409
}
0 commit comments