mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-01-10 22:33:58 +00:00
[common] track if option set failed and print help if so
This commit is contained in:
parent
b662128708
commit
2fe9dc7ca1
3 changed files with 41 additions and 27 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
a12-185-ge22f33a44b+1
|
a12-186-gb662128708+1
|
|
@ -51,7 +51,11 @@ struct Option
|
||||||
bool (*validator)(struct Option * opt, const char ** error);
|
bool (*validator)(struct Option * opt, const char ** error);
|
||||||
char * (*toString )(struct Option * opt);
|
char * (*toString )(struct Option * opt);
|
||||||
StringList (*getValues)(struct Option * opt);
|
StringList (*getValues)(struct Option * opt);
|
||||||
|
|
||||||
void (*printHelp)();
|
void (*printHelp)();
|
||||||
|
|
||||||
|
// internal use only
|
||||||
|
bool failed_set;
|
||||||
};
|
};
|
||||||
|
|
||||||
// register an NULL terminated array of options
|
// register an NULL terminated array of options
|
||||||
|
|
|
@ -220,7 +220,14 @@ void option_free()
|
||||||
|
|
||||||
static bool option_set(struct Option * opt, const char * value)
|
static bool option_set(struct Option * opt, const char * value)
|
||||||
{
|
{
|
||||||
return opt->parser(opt, value);
|
if (!opt->parser(opt, value))
|
||||||
|
{
|
||||||
|
opt->failed_set = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
opt->failed_set = false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool option_parse(int argc, char * argv[])
|
bool option_parse(int argc, char * argv[])
|
||||||
|
@ -266,7 +273,6 @@ bool option_parse(int argc, char * argv[])
|
||||||
|
|
||||||
if (!option_set(o, value))
|
if (!option_set(o, value))
|
||||||
{
|
{
|
||||||
DEBUG_ERROR("Failed to set the option value");
|
|
||||||
free(arg);
|
free(arg);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -456,8 +462,12 @@ bool option_validate()
|
||||||
{
|
{
|
||||||
struct Option * o = &state.options[i];
|
struct Option * o = &state.options[i];
|
||||||
const char * error = NULL;
|
const char * error = NULL;
|
||||||
if (o->validator)
|
bool invalid = o->failed_set;
|
||||||
if (!o->validator(o, &error))
|
|
||||||
|
if (!invalid && o->validator)
|
||||||
|
invalid = !o->validator(o, &error);
|
||||||
|
|
||||||
|
if (invalid)
|
||||||
{
|
{
|
||||||
printf("\nInvalid value provided to the option: %s:%s\n", o->module, o->name);
|
printf("\nInvalid value provided to the option: %s:%s\n", o->module, o->name);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue