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