forked from len0rd/rockbox
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[] = "\'\"";
|
char stopchars[] = "\'\"";
|
||||||
int skipped = 0;
|
int skipped = 0;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
if (!parameter || !*parameter)
|
||||||
|
{
|
||||||
|
*buf = '\0';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
const char* start = *parameter;
|
const char* start = *parameter;
|
||||||
|
|
||||||
if (strchr(stopchars, *start))
|
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 */
|
/* determine true false using the first character the rest are skipped/ignored */
|
||||||
int found = 0;
|
int found = 0;
|
||||||
const char tf_val[]="fn0ty1";/* false chars on left f/t should be balanced fffttt */
|
const char tf_val[]="fn0ty1";/* false chars on left f/t should be balanced fffttt */
|
||||||
|
if (!parameter || !*parameter)
|
||||||
|
return 0;
|
||||||
const char* start = *parameter;
|
const char* start = *parameter;
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,6 +140,8 @@ int longnum_parse(const char **parameter, long *number, long *decimal)
|
||||||
int neg = 0;
|
int neg = 0;
|
||||||
int digits = 0;
|
int digits = 0;
|
||||||
//logf ("n: %s\n", *parameter);
|
//logf ("n: %s\n", *parameter);
|
||||||
|
if (!parameter || !*parameter)
|
||||||
|
return 0;
|
||||||
const char* start = *parameter;
|
const char* start = *parameter;
|
||||||
|
|
||||||
if (*start == '-')
|
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
|
* Note: WS at beginning is stripped, **parameter starts at the first NON WS char
|
||||||
* return 0 for arg_callback to quit parsing immediately
|
* 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;
|
bool lastchr;
|
||||||
char argchar;
|
char argchar;
|
||||||
|
@ -222,7 +232,10 @@ void argparse(const char *parameter, int parameter_len, int (*arg_callback)(char
|
||||||
{
|
{
|
||||||
if ((*parameter) == '\0')
|
if ((*parameter) == '\0')
|
||||||
return;
|
return;
|
||||||
logf ("%s\n",parameter);
|
|
||||||
|
if (parameter_len < 0) { logf ("%s\n", parameter); }
|
||||||
|
else { logf ("%.*s\n", plen, parameter); }
|
||||||
|
|
||||||
argchar = *parameter;
|
argchar = *parameter;
|
||||||
lastchr = (*(parameter + 1) == '\0');
|
lastchr = (*(parameter + 1) == '\0');
|
||||||
while (*++parameter || lastchr)
|
while (*++parameter || lastchr)
|
||||||
|
@ -230,7 +243,7 @@ void argparse(const char *parameter, int parameter_len, int (*arg_callback)(char
|
||||||
lastchr = false;
|
lastchr = false;
|
||||||
if (isspace(*parameter))
|
if (isspace(*parameter))
|
||||||
continue; /* eat spaces at beginning */
|
continue; /* eat spaces at beginning */
|
||||||
if (!arg_callback(argchar, ¶meter))
|
if (!arg_callback(argchar, ¶meter, userdata))
|
||||||
return;
|
return;
|
||||||
break;
|
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
|
* Note: WS at beginning is stripped, **parameter starts at the first NON WS char
|
||||||
* return 0 for arg_callback to quit parsing immediately
|
* return 0 for arg_callback to quit parsing immediately
|
||||||
*/
|
*/
|
||||||
void argparse(const char *parameter, int parameter_len,
|
void argparse(const char *parameter, int parameter_len, void *userdata,
|
||||||
int (*arg_callback)(char argchar, const char **parameter));
|
int (*arg_callback)(char argchar, const char **parameter, void *userdata));
|
||||||
|
|
||||||
#endif /* _LIB_ARG_HELPER_H_ */
|
#endif /* _LIB_ARG_HELPER_H_ */
|
||||||
|
|
|
@ -1120,8 +1120,9 @@ int gui_syncpitchscreen_run(void)
|
||||||
return 0;
|
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;
|
int ret;
|
||||||
long num, dec;
|
long num, dec;
|
||||||
bool bret;
|
bool bret;
|
||||||
|
@ -1232,7 +1233,7 @@ enum plugin_status plugin_start(const void* parameter)
|
||||||
struct pvars cur;
|
struct pvars cur;
|
||||||
fill_pitchvars(&cur);
|
fill_pitchvars(&cur);
|
||||||
fill_pitchvars(&pitch_vars);
|
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)
|
if (pitch_vars.pitch != cur.pitch)
|
||||||
{
|
{
|
||||||
rb->sound_set_pitch(pitch_vars.pitch);
|
rb->sound_set_pitch(pitch_vars.pitch);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue