mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
plugin argparse update to add userdata to callback
fix a couple of gotchas if you aren't using NULL terminated strings Change-Id: If5d2a60c0c3e1653e26df50bfda7d3191989bca9
This commit is contained in:
parent
e8d7a8baaf
commit
e94f778f1c
3 changed files with 24 additions and 10 deletions
|
@ -44,6 +44,11 @@ int string_parse(const char **parameter, char* buf, size_t buf_sz)
|
|||
char stopchars[] = "\'\"";
|
||||
int skipped = 0;
|
||||
int found = 0;
|
||||
if (!parameter || !*parameter)
|
||||
{
|
||||
*buf = '\0';
|
||||
return 0;
|
||||
}
|
||||
const char* start = *parameter;
|
||||
|
||||
if (strchr(stopchars, *start))
|
||||
|
@ -95,6 +100,8 @@ int bool_parse(const char **parameter, bool *choice)
|
|||
/* determine true false using the first character the rest are skipped/ignored */
|
||||
int found = 0;
|
||||
const char tf_val[]="fn0ty1";/* false chars on left f/t should be balanced fffttt */
|
||||
if (!parameter || !*parameter)
|
||||
return 0;
|
||||
const char* start = *parameter;
|
||||
|
||||
|
||||
|
@ -133,6 +140,8 @@ int longnum_parse(const char **parameter, long *number, long *decimal)
|
|||
int neg = 0;
|
||||
int digits = 0;
|
||||
//logf ("n: %s\n", *parameter);
|
||||
if (!parameter || !*parameter)
|
||||
return 0;
|
||||
const char* start = *parameter;
|
||||
|
||||
if (*start == '-')
|
||||
|
@ -209,7 +218,8 @@ int num_parse(const char **parameter, int *number, int *decimal)
|
|||
* Note: WS at beginning is stripped, **parameter starts at the first NON WS char
|
||||
* return 0 for arg_callback to quit parsing immediately
|
||||
*/
|
||||
void argparse(const char *parameter, int parameter_len, int (*arg_callback)(char argchar, const char **parameter))
|
||||
void argparse(const char *parameter, int parameter_len, void *userdata,
|
||||
int (*arg_callback)(char argchar, const char **parameter, void *userdata))
|
||||
{
|
||||
bool lastchr;
|
||||
char argchar;
|
||||
|
@ -222,7 +232,10 @@ void argparse(const char *parameter, int parameter_len, int (*arg_callback)(char
|
|||
{
|
||||
if ((*parameter) == '\0')
|
||||
return;
|
||||
logf ("%s\n",parameter);
|
||||
|
||||
if (parameter_len < 0) { logf ("%s\n", parameter); }
|
||||
else { logf ("%.*s\n", plen, parameter); }
|
||||
|
||||
argchar = *parameter;
|
||||
lastchr = (*(parameter + 1) == '\0');
|
||||
while (*++parameter || lastchr)
|
||||
|
@ -230,7 +243,7 @@ void argparse(const char *parameter, int parameter_len, int (*arg_callback)(char
|
|||
lastchr = false;
|
||||
if (isspace(*parameter))
|
||||
continue; /* eat spaces at beginning */
|
||||
if (!arg_callback(argchar, ¶meter))
|
||||
if (!arg_callback(argchar, ¶meter, userdata))
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -54,7 +54,7 @@ int num_parse(const char **parameter, int *number, int *decimal);
|
|||
* Note: WS at beginning is stripped, **parameter starts at the first NON WS char
|
||||
* return 0 for arg_callback to quit parsing immediately
|
||||
*/
|
||||
void argparse(const char *parameter, int parameter_len,
|
||||
int (*arg_callback)(char argchar, const char **parameter));
|
||||
void argparse(const char *parameter, int parameter_len, void *userdata,
|
||||
int (*arg_callback)(char argchar, const char **parameter, void *userdata));
|
||||
|
||||
#endif /* _LIB_ARG_HELPER_H_ */
|
||||
|
|
|
@ -1120,8 +1120,9 @@ int gui_syncpitchscreen_run(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int arg_callback(char argchar, const char **parameter)
|
||||
static int arg_callback(char argchar, const char **parameter, void *userdata)
|
||||
{
|
||||
(void)userdata;
|
||||
int ret;
|
||||
long num, dec;
|
||||
bool bret;
|
||||
|
@ -1232,7 +1233,7 @@ enum plugin_status plugin_start(const void* parameter)
|
|||
struct pvars cur;
|
||||
fill_pitchvars(&cur);
|
||||
fill_pitchvars(&pitch_vars);
|
||||
argparse((const char*) parameter, -1, &arg_callback);
|
||||
argparse((const char*) parameter, -1, NULL, &arg_callback);
|
||||
if (pitch_vars.pitch != cur.pitch)
|
||||
{
|
||||
rb->sound_set_pitch(pitch_vars.pitch);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue