diff options
| author | Teruaki Kawashima <teru@rockbox.org> | 2010-06-09 12:58:02 +0000 |
|---|---|---|
| committer | Teruaki Kawashima <teru@rockbox.org> | 2010-06-09 12:58:02 +0000 |
| commit | a444eb57d494b737b6733100acbf50e26ebfb4ba (patch) | |
| tree | d4f52679b17dd7cb8509175870f6a65b47faca28 /apps/misc.c | |
| parent | 89033394445d174867dae614f91747aab826d9fc (diff) | |
| download | rockbox-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/misc.c')
| -rw-r--r-- | apps/misc.c | 22 |
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; |