perf tools: Add option macro OPT_BOOLEAN_SET
OPT_BOOLEAN_SET records whether a boolean option was set by the user. That information can be used to change the default value for the option after the options have been parsed. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1384768557-23331-4-git-send-email-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
4bc437964e
commit
167faf32b0
|
@ -78,6 +78,8 @@ static int get_value(struct parse_opt_ctx_t *p,
|
|||
|
||||
case OPTION_BOOLEAN:
|
||||
*(bool *)opt->value = unset ? false : true;
|
||||
if (opt->set)
|
||||
*(bool *)opt->set = true;
|
||||
return 0;
|
||||
|
||||
case OPTION_INCR:
|
||||
|
|
|
@ -82,6 +82,9 @@ typedef int parse_opt_cb(const struct option *, const char *arg, int unset);
|
|||
* OPTION_{BIT,SET_UINT,SET_PTR} store the {mask,integer,pointer} to put in
|
||||
* the value when met.
|
||||
* CALLBACKS can use it like they want.
|
||||
*
|
||||
* `set`::
|
||||
* whether an option was set by the user
|
||||
*/
|
||||
struct option {
|
||||
enum parse_opt_type type;
|
||||
|
@ -94,6 +97,7 @@ struct option {
|
|||
int flags;
|
||||
parse_opt_cb *callback;
|
||||
intptr_t defval;
|
||||
bool *set;
|
||||
};
|
||||
|
||||
#define check_vtype(v, type) ( BUILD_BUG_ON_ZERO(!__builtin_types_compatible_p(typeof(v), type)) + v )
|
||||
|
@ -103,6 +107,10 @@ struct option {
|
|||
#define OPT_GROUP(h) { .type = OPTION_GROUP, .help = (h) }
|
||||
#define OPT_BIT(s, l, v, h, b) { .type = OPTION_BIT, .short_name = (s), .long_name = (l), .value = check_vtype(v, int *), .help = (h), .defval = (b) }
|
||||
#define OPT_BOOLEAN(s, l, v, h) { .type = OPTION_BOOLEAN, .short_name = (s), .long_name = (l), .value = check_vtype(v, bool *), .help = (h) }
|
||||
#define OPT_BOOLEAN_SET(s, l, v, os, h) \
|
||||
{ .type = OPTION_BOOLEAN, .short_name = (s), .long_name = (l), \
|
||||
.value = check_vtype(v, bool *), .help = (h), \
|
||||
.set = check_vtype(os, bool *)}
|
||||
#define OPT_INCR(s, l, v, h) { .type = OPTION_INCR, .short_name = (s), .long_name = (l), .value = check_vtype(v, int *), .help = (h) }
|
||||
#define OPT_SET_UINT(s, l, v, h, i) { .type = OPTION_SET_UINT, .short_name = (s), .long_name = (l), .value = check_vtype(v, unsigned int *), .help = (h), .defval = (i) }
|
||||
#define OPT_SET_PTR(s, l, v, h, p) { .type = OPTION_SET_PTR, .short_name = (s), .long_name = (l), .value = (v), .help = (h), .defval = (p) }
|
||||
|
|
Loading…
Reference in New Issue