* grub-core/kern/misc.c (grub_vsnprintf_real): Unify int and wchar
handling.
This commit is contained in:
parent
a8f15bceea
commit
04dea7e6c2
2 changed files with 13 additions and 12 deletions
11
ChangeLog
11
ChangeLog
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue