From: Arnaldo Carvalho de Melo on
From: Arnaldo Carvalho de Melo <acme(a)redhat.com>

We have things like user_interval (-c/--count) in 'perf record' that
needs this.

Cc: Frédéric Weisbecker <fweisbec(a)gmail.com>
Cc: Mike Galbraith <efault(a)gmx.de>
Cc: Paul Mackerras <paulus(a)samba.org>
Cc: Peter Zijlstra <a.p.zijlstra(a)chello.nl>
Cc: Stephane Eranian <eranian(a)google.com>
Cc: Tom Zanussi <tzanussi(a)gmail.com>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme(a)redhat.com>
---
tools/perf/util/parse-options.c | 18 ++++++++++++++++++
tools/perf/util/parse-options.h | 2 ++
2 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
index ed88764..b05d51d 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,
case OPTION_STRING:
case OPTION_INTEGER:
case OPTION_LONG:
+ case OPTION_U64:
default:
break;
}
@@ -141,6 +142,22 @@ static int get_value(struct parse_opt_ctx_t *p,
return opterror(opt, "expects a numerical value", flags);
return 0;

+ case OPTION_U64:
+ if (unset) {
+ *(u64 *)opt->value = 0;
+ return 0;
+ }
+ if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
+ *(u64 *)opt->value = opt->defval;
+ return 0;
+ }
+ if (get_arg(p, opt, flags, &arg))
+ return -1;
+ *(u64 *)opt->value = strtoull(arg, (char **)&s, 10);
+ if (*s)
+ return opterror(opt, "expects a numerical value", flags);
+ return 0;
+
case OPTION_END:
case OPTION_ARGUMENT:
case OPTION_GROUP:
@@ -487,6 +504,7 @@ int usage_with_options_internal(const char * const *usagestr,
case OPTION_SET_INT:
case OPTION_SET_PTR:
case OPTION_LONG:
+ case OPTION_U64:
break;
}

diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h
index b2da725..e301e96 100644
--- a/tools/perf/util/parse-options.h
+++ b/tools/perf/util/parse-options.h
@@ -17,6 +17,7 @@ enum parse_opt_type {
OPTION_INTEGER,
OPTION_LONG,
OPTION_CALLBACK,
+ OPTION_U64,
};

enum parse_opt_flags {
@@ -101,6 +102,7 @@ struct option {
#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_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_STRING(s, l, v, a, h) { .type = OPTION_STRING, .short_name = (s), .long_name = (l), .value = (v), (a), .help = (h) }
#define OPT_DATE(s, l, v, h) \
{ .type = OPTION_CALLBACK, .short_name = (s), .long_name = (l), .value = (v), .argh = "time", .help = (h), .callback = parse_opt_approxidate_cb }
--
1.6.2.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/