mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-03-18 21:45:17 +01:00
cli: Parsing. Allow true/false parameter for boolean options.
Allow NOTMUCH_OPT_BOOLEAN to take a true or false parameter. In particular it allows the user to turn off a boolean option with --option=false.
This commit is contained in:
parent
db97cb5b65
commit
b3e4417897
1 changed files with 26 additions and 8 deletions
|
@ -28,6 +28,24 @@ _process_keyword_arg (const notmuch_opt_desc_t *arg_desc, const char *arg_str) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static notmuch_bool_t
|
||||||
|
_process_boolean_arg (const notmuch_opt_desc_t *arg_desc, char next, const char *arg_str) {
|
||||||
|
|
||||||
|
if (next == 0) {
|
||||||
|
*((notmuch_bool_t *)arg_desc->output_var) = TRUE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (strcmp (arg_str, "false") == 0) {
|
||||||
|
*((notmuch_bool_t *)arg_desc->output_var) = FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (strcmp (arg_str, "true") == 0) {
|
||||||
|
*((notmuch_bool_t *)arg_desc->output_var) = TRUE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Search for the {pos_arg_index}th position argument, return FALSE if
|
Search for the {pos_arg_index}th position argument, return FALSE if
|
||||||
that does not exist.
|
that does not exist.
|
||||||
|
@ -76,14 +94,15 @@ parse_option (const char *arg,
|
||||||
char *endptr;
|
char *endptr;
|
||||||
|
|
||||||
/* Everything but boolean arguments (switches) needs a
|
/* Everything but boolean arguments (switches) needs a
|
||||||
* delimiter, and a non-zero length value
|
* delimiter, and a non-zero length value. Boolean
|
||||||
|
* arguments may take an optional =true or =false value.
|
||||||
*/
|
*/
|
||||||
|
if (next != '=' && next != ':' && next != 0) return FALSE;
|
||||||
if (try->opt_type != NOTMUCH_OPT_BOOLEAN) {
|
if (next == 0) {
|
||||||
if (next != '=' && next != ':') return FALSE;
|
if (try->opt_type != NOTMUCH_OPT_BOOLEAN)
|
||||||
if (value[0] == 0) return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
if (next != 0) return FALSE;
|
if (value[0] == 0) return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try->output_var == NULL)
|
if (try->output_var == NULL)
|
||||||
|
@ -94,8 +113,7 @@ parse_option (const char *arg,
|
||||||
return _process_keyword_arg (try, value);
|
return _process_keyword_arg (try, value);
|
||||||
break;
|
break;
|
||||||
case NOTMUCH_OPT_BOOLEAN:
|
case NOTMUCH_OPT_BOOLEAN:
|
||||||
*((notmuch_bool_t *)try->output_var) = TRUE;
|
return _process_boolean_arg (try, next, value);
|
||||||
return TRUE;
|
|
||||||
break;
|
break;
|
||||||
case NOTMUCH_OPT_INT:
|
case NOTMUCH_OPT_INT:
|
||||||
*((int *)try->output_var) = strtol (value, &endptr, 10);
|
*((int *)try->output_var) = strtol (value, &endptr, 10);
|
||||||
|
|
Loading…
Add table
Reference in a new issue