diff options
Diffstat (limited to 'tools/perf/util/parse-options.c')
-rw-r--r-- | tools/perf/util/parse-options.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c index 31f404a032a9..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, | |||
78 | 78 | ||
79 | case OPTION_BOOLEAN: | 79 | case OPTION_BOOLEAN: |
80 | *(bool *)opt->value = unset ? false : true; | 80 | *(bool *)opt->value = unset ? false : true; |
81 | if (opt->set) | ||
82 | *(bool *)opt->set = true; | ||
81 | return 0; | 83 | return 0; |
82 | 84 | ||
83 | case OPTION_INCR: | 85 | case OPTION_INCR: |
@@ -224,6 +226,24 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg, | |||
224 | return 0; | 226 | return 0; |
225 | } | 227 | } |
226 | if (!rest) { | 228 | if (!rest) { |
229 | if (!prefixcmp(options->long_name, "no-")) { | ||
230 | /* | ||
231 | * The long name itself starts with "no-", so | ||
232 | * accept the option without "no-" so that users | ||
233 | * do not have to enter "no-no-" to get the | ||
234 | * negation. | ||
235 | */ | ||
236 | rest = skip_prefix(arg, options->long_name + 3); | ||
237 | if (rest) { | ||
238 | flags |= OPT_UNSET; | ||
239 | goto match; | ||
240 | } | ||
241 | /* Abbreviated case */ | ||
242 | if (!prefixcmp(options->long_name + 3, arg)) { | ||
243 | flags |= OPT_UNSET; | ||
244 | goto is_abbreviated; | ||
245 | } | ||
246 | } | ||
227 | /* abbreviated? */ | 247 | /* abbreviated? */ |
228 | if (!strncmp(options->long_name, arg, arg_end - arg)) { | 248 | if (!strncmp(options->long_name, arg, arg_end - arg)) { |
229 | is_abbreviated: | 249 | is_abbreviated: |
@@ -259,6 +279,7 @@ is_abbreviated: | |||
259 | if (!rest) | 279 | if (!rest) |
260 | continue; | 280 | continue; |
261 | } | 281 | } |
282 | match: | ||
262 | if (*rest) { | 283 | if (*rest) { |
263 | if (*rest != '=') | 284 | if (*rest != '=') |
264 | continue; | 285 | continue; |