Skip to content

Commit dec6119

Browse files
nivedita76ardbiesheuvel
authored andcommitted
efi/printf: Factor out integer argument retrieval
Factor out the code to get the correct type of numeric argument into a helper function. Signed-off-by: Arvind Sankar <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Ard Biesheuvel <[email protected]>
1 parent 3fbcf75 commit dec6119

File tree

1 file changed

+33
-33
lines changed

1 file changed

+33
-33
lines changed

drivers/firmware/efi/libstub/vsprintf.c

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,38 @@ int get_int(const char **fmt, va_list *ap)
244244
return 0;
245245
}
246246

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+
247279
int vsprintf(char *buf, const char *fmt, va_list ap)
248280
{
249281
int len;
@@ -370,40 +402,8 @@ int vsprintf(char *buf, const char *fmt, va_list ap)
370402
}
371403
if (*fmt == 'p') {
372404
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-
}
390405
} 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);
407407
}
408408
str = number(str, num, base, field_width, precision, flags);
409409
}

0 commit comments

Comments
 (0)