aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/parse-options.c18
-rw-r--r--tools/perf/util/parse-options.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
index ed887642460c..b05d51df2ce7 100644
--- a/tools/perf/util/parse-options.c
+++ b/tools/perf/util/parse-options.c
@@ -60,6 +60,7 @@ static int get_value(struct parse_opt_ctx_t *p,
60 case OPTION_STRING: 60 case OPTION_STRING:
61 case OPTION_INTEGER: 61 case OPTION_INTEGER:
62 case OPTION_LONG: 62 case OPTION_LONG:
63 case OPTION_U64:
63 default: 64 default:
64 break; 65 break;
65 } 66 }
@@ -141,6 +142,22 @@ static int get_value(struct parse_opt_ctx_t *p,
141 return opterror(opt, "expects a numerical value", flags); 142 return opterror(opt, "expects a numerical value", flags);
142 return 0; 143 return 0;
143 144
145 case OPTION_U64:
146 if (unset) {
147 *(u64 *)opt->value = 0;
148 return 0;
149 }
150 if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
151 *(u64 *)opt->value = opt->defval;
152 return 0;
153 }
154 if (get_arg(p, opt, flags, &arg))
155 return -1;
156 *(u64 *)opt->value = strtoull(arg, (char **)&s, 10);
157 if (*s)
158 return opterror(opt, "expects a numerical value", flags);
159 return 0;
160
144 case OPTION_END: 161 case OPTION_END:
145 case OPTION_ARGUMENT: 162 case OPTION_ARGUMENT:
146 case OPTION_GROUP: 163 case OPTION_GROUP:
@@ -487,6 +504,7 @@ int usage_with_options_internal(const char * const *usagestr,
487 case OPTION_SET_INT: 504 case OPTION_SET_INT:
488 case OPTION_SET_PTR: 505 case OPTION_SET_PTR:
489 case OPTION_LONG: 506 case OPTION_LONG:
507 case OPTION_U64:
490 break; 508 break;
491 } 509 }
492 510
diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h
index b2da725f102a..e301e96b9d17 100644
--- a/tools/perf/util/parse-options.h
+++ b/tools/perf/util/parse-options.h
@@ -17,6 +17,7 @@ enum parse_opt_type {
17 OPTION_INTEGER, 17 OPTION_INTEGER,
18 OPTION_LONG, 18 OPTION_LONG,
19 OPTION_CALLBACK, 19 OPTION_CALLBACK,
20 OPTION_U64,
20}; 21};
21 22
22enum parse_opt_flags { 23enum parse_opt_flags {
@@ -101,6 +102,7 @@ struct option {
101#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) } 102#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) }
102#define OPT_INTEGER(s, l, v, h) { .type = OPTION_INTEGER, .short_name = (s), .long_name = (l), .value = (v), .help = (h) } 103#define OPT_INTEGER(s, l, v, h) { .type = OPTION_INTEGER, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
103#define OPT_LONG(s, l, v, h) { .type = OPTION_LONG, .short_name = (s), .long_name = (l), .value = (v), .help = (h) } 104#define OPT_LONG(s, l, v, h) { .type = OPTION_LONG, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
105#define OPT_U64(s, l, v, h) { .type = OPTION_U64, .short_name = (s), .long_name = (l), .value = (v), .help = (h) }
104#define OPT_STRING(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = (v), (a), .help = (h) } 106#define OPT_STRING(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = (v), (a), .help = (h) }
105#define OPT_DATE(s, l, v, h) \ 107#define OPT_DATE(s, l, v, h) \
106 { .type = OPTION_CALLBACK, .short_name = (s), .long_name = (l), .value = (v), .argh = "time", .help = (h), .callback = parse_opt_approxidate_cb } 108 { .type = OPTION_CALLBACK, .short_name = (s), .long_name = (l), .value = (v), .argh = "time", .help = (h), .callback = parse_opt_approxidate_cb }