* grub-core/kern/misc.c (grub_vsnprintf_real): Unify int and wchar

handling.
This commit is contained in:
Vladimir Serbinenko 2013-10-27 14:47:04 +01:00
parent a8f15bceea
commit 04dea7e6c2
2 changed files with 13 additions and 12 deletions

View file

@ -1,13 +1,18 @@
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com> 2013-10-27 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vsnprintf_real): Unify int and wchar
handling.
2013-10-27 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_abort): Make static * grub-core/kern/misc.c (grub_abort): Make static
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com> 2013-10-27 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vsnprintf_real): Don't attempt to * grub-core/kern/misc.c (grub_vsnprintf_real): Don't attempt to
transform invalid unicode codepoints. transform invalid unicode codepoints.
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com> 2013-10-27 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vsnprintf_real): Remove needless explicit * grub-core/kern/misc.c (grub_vsnprintf_real): Remove needless explicit
\0 checking. \0 checking.

View file

@ -705,16 +705,17 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
} }
} }
enum { INT, WCHAR, LONG, LONGLONG, POINTER } types[count_args]; enum { INT, LONG, LONGLONG, POINTER } types[count_args];
union union
{ {
int i; int i;
grub_uint32_t w;
long l; long l;
long long ll; long long ll;
void *p; void *p;
} args[count_args]; } args[count_args];
COMPILE_TIME_ASSERT (sizeof (int) == sizeof (grub_uint32_t));
grub_memset (types, 0, sizeof (types)); grub_memset (types, 0, sizeof (types));
fmt = fmt0; fmt = fmt0;
@ -786,21 +787,16 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
case 's': case 's':
types[curn] = POINTER; types[curn] = POINTER;
break; break;
case 'C':
case 'c': case 'c':
types[curn] = INT; types[curn] = INT;
break; break;
case 'C':
types[curn] = WCHAR;
break;
} }
} }
for (n = 0; n < count_args; n++) for (n = 0; n < count_args; n++)
switch (types[n]) switch (types[n])
{ {
case WCHAR:
args[n].w = va_arg (args_in, grub_uint32_t);
break;
case POINTER: case POINTER:
args[n].p = va_arg (args_in, void *); args[n].p = va_arg (args_in, void *);
break; break;
@ -928,7 +924,7 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
case 'C': case 'C':
{ {
grub_uint32_t code = args[curn].w; grub_uint32_t code = args[curn].i;
int shift; int shift;
unsigned mask; unsigned mask;