From a444eb57d494b737b6733100acbf50e26ebfb4ba Mon Sep 17 00:00:00 2001 From: Teruaki Kawashima Date: Wed, 9 Jun 2010 12:58:02 +0000 Subject: 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 --- apps/misc.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'apps/misc.c') diff --git a/apps/misc.c b/apps/misc.c index d0af754913..41988363ad 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; -- cgit v1.2.3