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
					
				
			
		
					 2 changed files with 22 additions and 2 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue