Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions flag.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ typedef struct {
/// API that operate on implicit global flag context

char *flag_name(void *val);
char *flag_desc(void *val);

bool *flag_bool(const char *name, bool def, const char *desc);
void flag_bool_var(bool *var, const char *name, bool def, const char *desc);
Expand Down Expand Up @@ -147,6 +148,7 @@ void flag_print_options(FILE *stream);
void *flag_c_new(const char *program_name);
void flag_c_free(void *c);
char *flag_c_name(void *c, void *val);
char *flag_c_desc(void *c, void *val);

bool *flag_c_bool(void *c, const char *name, bool def, const char *desc);
void flag_c_bool_var(void *c, bool *var, const char *name, bool def, const char *desc);
Expand Down Expand Up @@ -302,6 +304,25 @@ char *flag_c_name(void *c, void *val)
return NULL;
}

char *flag_desc(void *val)
{
return flag_c_desc(&flag_global_context, val);
}

char *flag_c_desc(void *c, void *val)
{
Flag_Context *fc = (Flag_Context*)c;

for (size_t i = 0; i < fc->flags_count; ++i) {
Flag *flag = &fc->flags[i];
if (flag__get_ref(flag) == val) {
return flag->desc;
}
}

return NULL;
}

bool *flag_c_bool(void *c, const char *name, bool def, const char *desc)
{
Flag *flag = flag__new_flag((Flag_Context*)c, FLAG_BOOL, name, desc);
Expand Down