Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> Cc: kvm@xxxxxxxxxxxxxxx Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> --- tools/kvm/util/parse-options.c | 86 +++++++-------------------------------- 1 files changed, 16 insertions(+), 70 deletions(-) diff --git a/tools/kvm/util/parse-options.c b/tools/kvm/util/parse-options.c index c280379..2665be5 100644 --- a/tools/kvm/util/parse-options.c +++ b/tools/kvm/util/parse-options.c @@ -1,3 +1,4 @@ +#include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> @@ -39,82 +40,27 @@ static int get_arg(struct parse_opt_ctx_t *p, const struct option *opt, return 0; } -#define numvalue(c) \ - ((c) >= 'a' ? (c) - 'a' + 10 : \ - (c) >= 'A' ? (c) - 'A' + 10 : (c) - '0') - -static u64 readhex(const char *str, bool *error) -{ - char *pos = strchr(str, 'x') + 1; - u64 res = 0; - - while (*pos) { - unsigned int v = numvalue(*pos); - if (v > 16) { - *error = true; - return 0; - } - - res = (res * 16) + v; - pos++; - } - - *error = false; - return res; -} - static int readnum(const struct option *opt, int flags, const char *str, char **end) { - if (strchr(str, 'x')) { - bool error; - u64 value; - - value = readhex(str, &error); - if (error) - goto enotnum; - - switch (opt->type) { - case OPTION_INTEGER: - *(int *)opt->value = value; - break; - case OPTION_UINTEGER: - *(unsigned int *)opt->value = value; - break; - case OPTION_LONG: - *(long *)opt->value = value; - break; - case OPTION_U64: - *(u64 *)opt->value = value; - break; - default: - goto invcall; - } - } else { - switch (opt->type) { - case OPTION_INTEGER: - *(int *)opt->value = strtol(str, end, 10); - break; - case OPTION_UINTEGER: - *(unsigned int *)opt->value = strtol(str, end, 10); - break; - case OPTION_LONG: - *(long *)opt->value = strtol(str, end, 10); - break; - case OPTION_U64: - *(u64 *)opt->value = strtoull(str, end, 10); - break; - default: - goto invcall; - } + switch (opt->type) { + case OPTION_INTEGER: + *(int *)opt->value = strtol(str, end, 0); + break; + case OPTION_UINTEGER: + *(unsigned int *)opt->value = strtol(str, end, 0); + break; + case OPTION_LONG: + *(long *)opt->value = strtol(str, end, 0); + break; + case OPTION_U64: + *(u64 *)opt->value = strtoull(str, end, 0); + break; + default: + return opterror(opt, "invalid numeric conversion", flags); } return 0; - -enotnum: - return opterror(opt, "expects a numerical value", flags); -invcall: - return opterror(opt, "invalid numeric conversion", flags); } static int get_value(struct parse_opt_ctx_t *p, -- 1.7.6.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html