Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

plugin argparse update to add userdata to callback

fix a couple of gotchas if you aren't using NULL terminated strings

Change-Id: If5d2a60c0c3e1653e26df50bfda7d3191989bca9

+24 -10
+19 -6
apps/plugins/lib/arg_helper.c
··· 31 31 #ifdef PLUGIN 32 32 #define strchr rb->strchr 33 33 #endif 34 - int string_parse(const char **parameter, char* buf, size_t buf_sz) 34 + int string_parse(const char **parameter, char *buf, size_t buf_sz) 35 35 { 36 36 /* fills buf with a string upto buf_sz, null terminates the buffer 37 37 * strings break on WS by default but can be enclosed in single or double quotes ··· 44 44 char stopchars[] = "\'\""; 45 45 int skipped = 0; 46 46 int found = 0; 47 + if (!parameter || !*parameter) 48 + { 49 + *buf = '\0'; 50 + return 0; 51 + } 47 52 const char* start = *parameter; 48 53 49 54 if (strchr(stopchars, *start)) ··· 79 84 return found + skipped; 80 85 } 81 86 82 - int char_parse(const char **parameter, char* character) 87 + int char_parse(const char **parameter, char *character) 83 88 { 84 89 /* passes *character a single character eats remaining non-WS characters */ 85 90 char buf[2]; ··· 95 100 /* determine true false using the first character the rest are skipped/ignored */ 96 101 int found = 0; 97 102 const char tf_val[]="fn0ty1";/* false chars on left f/t should be balanced fffttt */ 103 + if (!parameter || !*parameter) 104 + return 0; 98 105 const char* start = *parameter; 99 106 100 107 ··· 133 140 int neg = 0; 134 141 int digits = 0; 135 142 //logf ("n: %s\n", *parameter); 136 - const char *start = *parameter; 143 + if (!parameter || !*parameter) 144 + return 0; 145 + const char* start = *parameter; 137 146 138 147 if (*start == '-') 139 148 { ··· 209 218 * Note: WS at beginning is stripped, **parameter starts at the first NON WS char 210 219 * return 0 for arg_callback to quit parsing immediately 211 220 */ 212 - void argparse(const char *parameter, int parameter_len, int (*arg_callback)(char argchar, const char **parameter)) 221 + void argparse(const char *parameter, int parameter_len, void *userdata, 222 + int (*arg_callback)(char argchar, const char **parameter, void *userdata)) 213 223 { 214 224 bool lastchr; 215 225 char argchar; ··· 222 232 { 223 233 if ((*parameter) == '\0') 224 234 return; 225 - logf ("%s\n",parameter); 235 + 236 + if (parameter_len < 0) { logf ("%s\n", parameter); } 237 + else { logf ("%.*s\n", plen, parameter); } 238 + 226 239 argchar = *parameter; 227 240 lastchr = (*(parameter + 1) == '\0'); 228 241 while (*++parameter || lastchr) ··· 230 243 lastchr = false; 231 244 if (isspace(*parameter)) 232 245 continue; /* eat spaces at beginning */ 233 - if (!arg_callback(argchar, &parameter)) 246 + if (!arg_callback(argchar, &parameter, userdata)) 234 247 return; 235 248 break; 236 249 }
+2 -2
apps/plugins/lib/arg_helper.h
··· 54 54 * Note: WS at beginning is stripped, **parameter starts at the first NON WS char 55 55 * return 0 for arg_callback to quit parsing immediately 56 56 */ 57 - void argparse(const char *parameter, int parameter_len, 58 - int (*arg_callback)(char argchar, const char **parameter)); 57 + void argparse(const char *parameter, int parameter_len, void *userdata, 58 + int (*arg_callback)(char argchar, const char **parameter, void *userdata)); 59 59 60 60 #endif /* _LIB_ARG_HELPER_H_ */
+3 -2
apps/plugins/pitch_screen.c
··· 1120 1120 return 0; 1121 1121 } 1122 1122 1123 - static int arg_callback(char argchar, const char **parameter) 1123 + static int arg_callback(char argchar, const char **parameter, void *userdata) 1124 1124 { 1125 + (void)userdata; 1125 1126 int ret; 1126 1127 long num, dec; 1127 1128 bool bret; ··· 1232 1233 struct pvars cur; 1233 1234 fill_pitchvars(&cur); 1234 1235 fill_pitchvars(&pitch_vars); 1235 - argparse((const char*) parameter, -1, &arg_callback); 1236 + argparse((const char*) parameter, -1, NULL, &arg_callback); 1236 1237 if (pitch_vars.pitch != cur.pitch) 1237 1238 { 1238 1239 rb->sound_set_pitch(pitch_vars.pitch);