mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-04-26 16:46:28 +00:00
[common] track if option set failed and print help if so
This commit is contained in:
parent
b662128708
commit
2fe9dc7ca1
@ -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,31 +462,35 @@ 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);
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
printf("\n Error: %s\n", error);
|
||||||
|
|
||||||
|
if (o->getValues)
|
||||||
{
|
{
|
||||||
printf("\nInvalid value provided to the option: %s:%s\n", o->module, o->name);
|
StringList values = o->getValues(o);
|
||||||
|
printf("\nValid values are:\n\n");
|
||||||
if (error)
|
for(unsigned int v = 0; v < stringlist_count(values); ++v)
|
||||||
printf("\n Error: %s\n", error);
|
printf(" * %s\n", stringlist_at(values, v));
|
||||||
|
stringlist_free(&values);
|
||||||
if (o->getValues)
|
|
||||||
{
|
|
||||||
StringList values = o->getValues(o);
|
|
||||||
printf("\nValid values are:\n\n");
|
|
||||||
for(unsigned int v = 0; v < stringlist_count(values); ++v)
|
|
||||||
printf(" * %s\n", stringlist_at(values, v));
|
|
||||||
stringlist_free(&values);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o->printHelp)
|
|
||||||
{
|
|
||||||
printf("\n");
|
|
||||||
o->printHelp();
|
|
||||||
}
|
|
||||||
|
|
||||||
ok = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (o->printHelp)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
o->printHelp();
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ok)
|
if (!ok)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user