OptsVisitor: rebase opts_type_uint64() to parse_uint_full()

Simplify the code in preparation for the next patch.

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Wanlong Gao <gaowanlong@cn.fujitsu.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
Laszlo Ersek 2013-08-20 00:35:36 +02:00 committed by Luiz Capitulino
parent 1e1c555a49
commit 62d090e23f

View File

@ -407,6 +407,7 @@ opts_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)
OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v); OptsVisitor *ov = DO_UPCAST(OptsVisitor, visitor, v);
const QemuOpt *opt; const QemuOpt *opt;
const char *str; const char *str;
unsigned long long val;
if (ov->list_mode == LM_UNSIGNED_INTERVAL) { if (ov->list_mode == LM_UNSIGNED_INTERVAL) {
*obj = ov->range_next.u; *obj = ov->range_next.u;
@ -417,26 +418,12 @@ opts_type_uint64(Visitor *v, uint64_t *obj, const char *name, Error **errp)
if (!opt) { if (!opt) {
return; return;
} }
str = opt->str; str = opt->str;
if (str != NULL) {
while (isspace((unsigned char)*str)) {
++str;
}
if (*str != '-' && *str != '\0') { if (parse_uint_full(str, &val, 0) == 0 && val <= UINT64_MAX) {
unsigned long long val; *obj = val;
char *endptr; processed(ov, name);
return;
/* non-empty, non-negative subject sequence */
errno = 0;
val = strtoull(str, &endptr, 0);
if (*endptr == '\0' && errno == 0 && val <= UINT64_MAX) {
*obj = val;
processed(ov, name);
return;
}
}
} }
error_set(errp, QERR_INVALID_PARAMETER_VALUE, opt->name, error_set(errp, QERR_INVALID_PARAMETER_VALUE, opt->name,
"an uint64 value"); "an uint64 value");