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.tar.gz rockbox-a444eb57d494b737b6733100acbf50e26ebfb4ba.zip |
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 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, | |||
967 | const char** s; | 967 | const char** s; |
968 | int* d; | 968 | int* d; |
969 | bool set, is_negative; | 969 | bool set, is_negative; |
970 | bool is_last_var; | ||
971 | int i=0; | 970 | int i=0; |
972 | 971 | ||
973 | va_start(ap, str); | 972 | va_start(ap, str); |
@@ -982,7 +981,6 @@ const char* parse_list(const char *fmt, uint32_t *set_vals, | |||
982 | goto err; | 981 | goto err; |
983 | p++; | 982 | p++; |
984 | } | 983 | } |
985 | is_last_var = fmt[1] == '\0'; | ||
986 | set = false; | 984 | set = false; |
987 | switch (*fmt++) | 985 | switch (*fmt++) |
988 | { | 986 | { |
@@ -998,6 +996,7 @@ const char* parse_list(const char *fmt, uint32_t *set_vals, | |||
998 | case 'd': /* int */ | 996 | case 'd': /* int */ |
999 | is_negative = false; | 997 | is_negative = false; |
1000 | d = va_arg(ap, int*); | 998 | d = va_arg(ap, int*); |
999 | |||
1001 | if (*p == '-' && isdigit(*(p+1))) | 1000 | if (*p == '-' && isdigit(*(p+1))) |
1002 | { | 1001 | { |
1003 | is_negative = true; | 1002 | is_negative = true; |
@@ -1007,8 +1006,7 @@ const char* parse_list(const char *fmt, uint32_t *set_vals, | |||
1007 | { | 1006 | { |
1008 | if (!set_vals || *p != '-') | 1007 | if (!set_vals || *p != '-') |
1009 | goto err; | 1008 | goto err; |
1010 | while (*p && (*p != sep && *p != ')')) | 1009 | p++; |
1011 | p++; | ||
1012 | } | 1010 | } |
1013 | else | 1011 | else |
1014 | { | 1012 | { |
@@ -1030,8 +1028,7 @@ const char* parse_list(const char *fmt, uint32_t *set_vals, | |||
1030 | { | 1028 | { |
1031 | if (!set_vals || *p != '-') | 1029 | if (!set_vals || *p != '-') |
1032 | goto err; | 1030 | goto err; |
1033 | while (*p && *p != sep && (!is_last_var || (is_last_var && *p!=')'))) | 1031 | p++; |
1034 | p++; | ||
1035 | } | 1032 | } |
1036 | else | 1033 | else |
1037 | { | 1034 | { |
@@ -1046,17 +1043,16 @@ const char* parse_list(const char *fmt, uint32_t *set_vals, | |||
1046 | case 'g': /* greyscale colour (0-3) */ | 1043 | case 'g': /* greyscale colour (0-3) */ |
1047 | d = va_arg(ap, int*); | 1044 | d = va_arg(ap, int*); |
1048 | 1045 | ||
1049 | if (is0123(*p)) | 1046 | if (!is0123(*p)) |
1050 | { | 1047 | { |
1051 | *d = *p++ - '0'; | 1048 | if (!set_vals || *p != '-') |
1052 | set = true; | 1049 | goto err; |
1050 | p++; | ||
1053 | } | 1051 | } |
1054 | else if (!set_vals || *p != '-') | ||
1055 | goto err; | ||
1056 | else | 1052 | else |
1057 | { | 1053 | { |
1058 | while (*p && *p != sep && (!is_last_var || (is_last_var && *p!=')'))) | 1054 | *d = *p++ - '0'; |
1059 | p++; | 1055 | set = true; |
1060 | } | 1056 | } |
1061 | 1057 | ||
1062 | break; | 1058 | break; |