perf options: Introduce OPT_UINTEGER
For unsigned int options to be parsed, next patches will make use of it. Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Cc: Tom Zanussi <tzanussi@gmail.com> LKML-Reference: <new-submission> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
dc4ff19341
commit
c100edbee8
@ -59,6 +59,7 @@ static int get_value(struct parse_opt_ctx_t *p,
|
|||||||
case OPTION_GROUP:
|
case OPTION_GROUP:
|
||||||
case OPTION_STRING:
|
case OPTION_STRING:
|
||||||
case OPTION_INTEGER:
|
case OPTION_INTEGER:
|
||||||
|
case OPTION_UINTEGER:
|
||||||
case OPTION_LONG:
|
case OPTION_LONG:
|
||||||
case OPTION_U64:
|
case OPTION_U64:
|
||||||
default:
|
default:
|
||||||
@ -126,6 +127,22 @@ static int get_value(struct parse_opt_ctx_t *p,
|
|||||||
return opterror(opt, "expects a numerical value", flags);
|
return opterror(opt, "expects a numerical value", flags);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case OPTION_UINTEGER:
|
||||||
|
if (unset) {
|
||||||
|
*(unsigned int *)opt->value = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
|
||||||
|
*(unsigned int *)opt->value = opt->defval;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (get_arg(p, opt, flags, &arg))
|
||||||
|
return -1;
|
||||||
|
*(unsigned int *)opt->value = strtol(arg, (char **)&s, 10);
|
||||||
|
if (*s)
|
||||||
|
return opterror(opt, "expects a numerical value", flags);
|
||||||
|
return 0;
|
||||||
|
|
||||||
case OPTION_LONG:
|
case OPTION_LONG:
|
||||||
if (unset) {
|
if (unset) {
|
||||||
*(long *)opt->value = 0;
|
*(long *)opt->value = 0;
|
||||||
@ -463,7 +480,10 @@ int usage_with_options_internal(const char * const *usagestr,
|
|||||||
switch (opts->type) {
|
switch (opts->type) {
|
||||||
case OPTION_ARGUMENT:
|
case OPTION_ARGUMENT:
|
||||||
break;
|
break;
|
||||||
|
case OPTION_LONG:
|
||||||
|
case OPTION_U64:
|
||||||
case OPTION_INTEGER:
|
case OPTION_INTEGER:
|
||||||
|
case OPTION_UINTEGER:
|
||||||
if (opts->flags & PARSE_OPT_OPTARG)
|
if (opts->flags & PARSE_OPT_OPTARG)
|
||||||
if (opts->long_name)
|
if (opts->long_name)
|
||||||
pos += fprintf(stderr, "[=<n>]");
|
pos += fprintf(stderr, "[=<n>]");
|
||||||
@ -503,8 +523,6 @@ int usage_with_options_internal(const char * const *usagestr,
|
|||||||
case OPTION_INCR:
|
case OPTION_INCR:
|
||||||
case OPTION_SET_INT:
|
case OPTION_SET_INT:
|
||||||
case OPTION_SET_PTR:
|
case OPTION_SET_PTR:
|
||||||
case OPTION_LONG:
|
|
||||||
case OPTION_U64:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ enum parse_opt_type {
|
|||||||
OPTION_LONG,
|
OPTION_LONG,
|
||||||
OPTION_CALLBACK,
|
OPTION_CALLBACK,
|
||||||
OPTION_U64,
|
OPTION_U64,
|
||||||
|
OPTION_UINTEGER,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum parse_opt_flags {
|
enum parse_opt_flags {
|
||||||
@ -101,6 +102,7 @@ struct option {
|
|||||||
#define OPT_SET_INT(s, l, v, h, i) { .type = OPTION_SET_INT, .short_name = (s), .long_name = (l), .value = (v), .help = (h), .defval = (i) }
|
#define OPT_SET_INT(s, l, v, h, i) { .type = OPTION_SET_INT, .short_name = (s), .long_name = (l), .value = (v), .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) }
|
#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) }
|
||||||
#define OPT_INTEGER(s, l, v, h) { .type = OPTION_INTEGER, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
#define OPT_INTEGER(s, l, v, h) { .type = OPTION_INTEGER, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
||||||
|
#define OPT_UINTEGER(s, l, v, h) { .type = OPTION_UINTEGER, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
||||||
#define OPT_LONG(s, l, v, h) { .type = OPTION_LONG, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
#define OPT_LONG(s, l, v, h) { .type = OPTION_LONG, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
||||||
#define OPT_U64(s, l, v, h) { .type = OPTION_U64, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
#define OPT_U64(s, l, v, h) { .type = OPTION_U64, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
|
||||||
#define OPT_STRING(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = (v), (a), .help = (h) }
|
#define OPT_STRING(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = (v), (a), .help = (h) }
|
||||||
|
Loading…
Reference in New Issue
Block a user