summaryrefslogtreecommitdiff
path: root/apps/misc.c
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/misc.c
parent89033394445d174867dae614f91747aab826d9fc (diff)
downloadrockbox-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.c22
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;