aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2013-11-18 04:55:55 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-11-27 12:58:36 -0500
commit4bc437964ef540462bd15af4a713da62961809aa (patch)
tree4d6dcde004db36b4865be799c9423c306e523ee3
parent3aa5939d71fa22a947808ba9c798b8537c35097a (diff)
perf tools: Allow '--inherit' as the negation of '--no-inherit'
Long options can be negated by prefixing them with 'no-'. However options that already start with 'no-', such as '--no-inherit' result in ugly double 'no's. Avoid that by accepting that the removal of 'no-' also negates the long option. Suggested-by: Peter Zijlstra <peterz@infradead.org> 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-3-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.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
index 31f404a032a9..b6b39ff14fbb 100644
--- a/tools/perf/util/parse-options.c
+++ b/tools/perf/util/parse-options.c
@@ -224,6 +224,24 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
224 return 0; 224 return 0;
225 } 225 }
226 if (!rest) { 226 if (!rest) {
227 if (!prefixcmp(options->long_name, "no-")) {
228 /*
229 * The long name itself starts with "no-", so
230 * accept the option without "no-" so that users
231 * do not have to enter "no-no-" to get the
232 * negation.
233 */
234 rest = skip_prefix(arg, options->long_name + 3);
235 if (rest) {
236 flags |= OPT_UNSET;
237 goto match;
238 }
239 /* Abbreviated case */
240 if (!prefixcmp(options->long_name + 3, arg)) {
241 flags |= OPT_UNSET;
242 goto is_abbreviated;
243 }
244 }
227 /* abbreviated? */ 245 /* abbreviated? */
228 if (!strncmp(options->long_name, arg, arg_end - arg)) { 246 if (!strncmp(options->long_name, arg, arg_end - arg)) {
229is_abbreviated: 247is_abbreviated:
@@ -259,6 +277,7 @@ is_abbreviated:
259 if (!rest) 277 if (!rest)
260 continue; 278 continue;
261 } 279 }
280match:
262 if (*rest) { 281 if (*rest) {
263 if (*rest != '=') 282 if (*rest != '=')
264 continue; 283 continue;