[common] add getValues callback for options

This commit is contained in:
Geoffrey McRae 2019-05-12 16:13:50 +10:00
parent 5d69d2aba9
commit e22f33a44b
4 changed files with 19 additions and 8 deletions

View File

@ -1 +1 @@
a12-183-g0090580a64+1 a12-184-g5d69d2aba9+1

View File

@ -6,6 +6,7 @@ include_directories(
) )
set(SOURCES set(SOURCES
src/stringlist.c
src/option.c src/option.c
) )

View File

@ -17,8 +17,8 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include "common/stringlist.h"
enum OptionType enum OptionType
{ {
@ -33,9 +33,9 @@ struct Option;
struct Option struct Option
{ {
const char * module; const char * module;
const char * name; const char * name;
const char * description; const char * description;
enum OptionType type; enum OptionType type;
union union
@ -47,9 +47,10 @@ struct Option
} }
value; value;
bool (*parser )(struct Option * opt, const char * str); bool (*parser )(struct Option * opt, const char * str);
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);
void (*printHelp)(); void (*printHelp)();
}; };

View File

@ -464,6 +464,15 @@ bool option_validate()
if (error) if (error)
printf("\n Error: %s\n", error); printf("\n Error: %s\n", error);
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) if (o->printHelp)
{ {
printf("\n"); printf("\n");