summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2010-06-09 12:58:02 +0000
committerTeruaki Kawashima <teru@rockbox.org>2010-06-09 12:58:02 +0000
commita444eb57d494b737b6733100acbf50e26ebfb4ba (patch)
treed4f52679b17dd7cb8509175870f6a65b47faca28 /apps
parent89033394445d174867dae614f91747aab826d9fc (diff)
downloadrockbox-a444eb57d494b737b6733100acbf50e26ebfb4ba.zip
rockbox-a444eb57d494b737b6733100acbf50e26ebfb4ba.tar.gz
rockbox-a444eb57d494b737b6733100acbf50e26ebfb4ba.tar.bz2
rockbox-a444eb57d494b737b6733100acbf50e26ebfb4ba.tar.xz
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
Diffstat (limited to 'apps')
-rw-r--r--apps/misc.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/apps/misc.c b/apps/misc.c
index d0af754..4198836 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -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,17 +1043,16 @@ 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))
{
- *d = *p++ - '0';
- set = true;
+ if (!set_vals || *p != '-')
+ goto err;
+ p++;
}
- else if (!set_vals || *p != '-')
- goto err;
else
{
- while (*p && *p != sep && (!is_last_var || (is_last_var && *p!=')')))
- p++;
+ *d = *p++ - '0';
+ set = true;
}
break;