diff options
| author | Adrian Hunter <adrian.hunter@intel.com> | 2013-11-18 11:55:56 +0200 | 
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-11-27 14:58:36 -0300 | 
| commit | 167faf32b07fc47637048fbcbdfcf4a89481686d (patch) | |
| tree | 21c8954cbf3a7c9b29bd83709d22c24418bb6c6b | |
| parent | 4bc437964ef540462bd15af4a713da62961809aa (diff) | |
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>
| -rw-r--r-- | tools/perf/util/parse-options.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/parse-options.h | 8 | 
2 files changed, 10 insertions, 0 deletions
| diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c index b6b39ff14fbb..d22e3f8017dc 100644 --- a/tools/perf/util/parse-options.c +++ b/tools/perf/util/parse-options.c @@ -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: diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h index b0241e28eaf7..cbf0149cf221 100644 --- a/tools/perf/util/parse-options.h +++ b/tools/perf/util/parse-options.h @@ -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) } | 
