Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c100edbe authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent dc4ff193
Loading
Loading
Loading
Loading
+20 −2
Original line number Original line Diff line number Diff line
@@ -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;
		}
		}


+2 −0
Original line number Original line Diff line number Diff line
@@ -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) }