* grub-core/kern/misc.c (grub_vsnprintf_real): Remove nested functions.

This commit is contained in:
Vladimir Serbinenko 2013-11-07 02:49:50 +01:00
parent 40a5bfde36
commit 4bfe934cd1
2 changed files with 46 additions and 38 deletions

View File

@ -1,3 +1,7 @@
2013-11-07 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vsnprintf_real): Remove nested functions.
2013-11-07 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/arg.c (grub_arg_parse): Remove nested function.

View File

@ -614,6 +614,31 @@ grub_lltoa (char *str, int c, unsigned long long n)
return p;
}
static inline void
write_char (char *str, grub_size_t *count, grub_size_t max_len, unsigned char ch)
{
if (*count < max_len)
str[*count] = ch;
(*count)++;
}
static inline void
write_str (char *str, grub_size_t *count, grub_size_t max_len, const char *s)
{
while (*s)
write_char (str, count, max_len, *s++);
}
static inline void
write_fill (char *str, grub_size_t *count, grub_size_t max_len, const char ch, int count_fill)
{
int i;
for (i = 0; i < count_fill; i++)
write_char (str, count, max_len, ch);
}
static int
grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list args_in)
{
@ -622,30 +647,6 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
grub_size_t count = 0;
grub_size_t count_args = 0;
const char *fmt;
auto void write_char (unsigned char ch);
auto void write_str (const char *s);
auto void write_fill (const char ch, int count_fill);
void write_char (unsigned char ch)
{
if (count < max_len)
*str++ = ch;
count++;
}
void write_str (const char *s)
{
while (*s)
write_char (*s++);
}
void write_fill (const char ch, int count_fill)
{
int i;
for (i = 0; i < count_fill; i++)
write_char (ch);
}
fmt = fmt0;
while ((c = *fmt++) != 0)
@ -817,7 +818,7 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
if (c != '%')
{
write_char (c);
write_char (str, &count, max_len,c);
continue;
}
@ -871,7 +872,7 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
if (c == '%')
{
write_char (c);
write_char (str, &count, max_len,c);
continue;
}
@ -881,7 +882,7 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
switch (c)
{
case 'p':
write_str ("0x");
write_str (str, &count, max_len, "0x");
c = 'x';
longlongfmt |= (sizeof (void *) == sizeof (long long));
/* Fall through. */
@ -901,14 +902,14 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
else
grub_lltoa (tmp, c, args[curn].i);
if (! rightfill && grub_strlen (tmp) < format1)
write_fill (zerofill, format1 - grub_strlen (tmp));
write_str (tmp);
write_fill (str, &count, max_len, zerofill, format1 - grub_strlen (tmp));
write_str (str, &count, max_len, tmp);
if (rightfill && grub_strlen (tmp) < format1)
write_fill (zerofill, format1 - grub_strlen (tmp));
write_fill (str, &count, max_len, zerofill, format1 - grub_strlen (tmp));
break;
case 'c':
write_char (args[curn].i & 0xff);
write_char (str, &count, max_len,args[curn].i & 0xff);
break;
case 'C':
@ -944,10 +945,10 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
mask = 0;
}
write_char (mask | (code >> shift));
write_char (str, &count, max_len,mask | (code >> shift));
for (shift -= 6; shift >= 0; shift -= 6)
write_char (0x80 | (0x3f & (code >> shift)));
write_char (str, &count, max_len,0x80 | (0x3f & (code >> shift)));
}
break;
@ -960,25 +961,28 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
len++;
if (!rightfill && len < format1)
write_fill (zerofill, format1 - len);
write_fill (str, &count, max_len, zerofill, format1 - len);
grub_size_t i;
for (i = 0; i < len; i++)
write_char (*p++);
write_char (str, &count, max_len,*p++);
if (rightfill && len < format1)
write_fill (zerofill, format1 - len);
write_fill (str, &count, max_len, zerofill, format1 - len);
}
break;
default:
write_char (c);
write_char (str, &count, max_len,c);
break;
}
}
*str = '\0';
if (count < max_len)
str[count] = '\0';
else
str[max_len] = '\0';
return count;
}