1
0
Fork 0
forked from len0rd/rockbox

simplify parse_list. don't search for terminating separator or parenthesis when '-' is set.

this change disallows something like %V(0,0,-foo,-,-).

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26721 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Teruaki Kawashima 2010-06-09 12:58:02 +00:00
parent 8903339444
commit a444eb57d4

View file

@ -967,7 +967,6 @@ const char* parse_list(const char *fmt, uint32_t *set_vals,
const char** s;
int* d;
bool set, is_negative;
bool is_last_var;
int i=0;
va_start(ap, str);
@ -982,7 +981,6 @@ const char* parse_list(const char *fmt, uint32_t *set_vals,
goto err;
p++;
}
is_last_var = fmt[1] == '\0';
set = false;
switch (*fmt++)
{
@ -998,6 +996,7 @@ const char* parse_list(const char *fmt, uint32_t *set_vals,
case 'd': /* int */
is_negative = false;
d = va_arg(ap, int*);
if (*p == '-' && isdigit(*(p+1)))
{
is_negative = true;
@ -1007,8 +1006,7 @@ const char* parse_list(const char *fmt, uint32_t *set_vals,
{
if (!set_vals || *p != '-')
goto err;
while (*p && (*p != sep && *p != ')'))
p++;
p++;
}
else
{
@ -1030,8 +1028,7 @@ const char* parse_list(const char *fmt, uint32_t *set_vals,
{
if (!set_vals || *p != '-')
goto err;
while (*p && *p != sep && (!is_last_var || (is_last_var && *p!=')')))
p++;
p++;
}
else
{
@ -1046,18 +1043,17 @@ const char* parse_list(const char *fmt, uint32_t *set_vals,
case 'g': /* greyscale colour (0-3) */
d = va_arg(ap, int*);
if (is0123(*p))
if (!is0123(*p))
{
if (!set_vals || *p != '-')
goto err;
p++;
}
else
{
*d = *p++ - '0';
set = true;
}
else if (!set_vals || *p != '-')
goto err;
else
{
while (*p && *p != sep && (!is_last_var || (is_last_var && *p!=')')))
p++;
}
break;
#endif