From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33672) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8rNl-0005es-KL for qemu-devel@nongnu.org; Thu, 30 Jan 2014 08:10:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W8rNd-00038n-6P for qemu-devel@nongnu.org; Thu, 30 Jan 2014 08:10:13 -0500 Received: from mail-ea0-x235.google.com ([2a00:1450:4013:c01::235]:37671) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W8rNc-00035K-Sd for qemu-devel@nongnu.org; Thu, 30 Jan 2014 08:10:05 -0500 Received: by mail-ea0-f181.google.com with SMTP id m10so1644291eaj.12 for ; Thu, 30 Jan 2014 05:10:04 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Thu, 30 Jan 2014 14:09:43 +0100 Message-Id: <1391087394-17914-2-git-send-email-pbonzini@redhat.com> In-Reply-To: <1391087394-17914-1-git-send-email-pbonzini@redhat.com> References: <1391087394-17914-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH 01/12] qapi: add size parser to StringInputVisitor List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: armbru@redhat.com, afaerber@suse.de Signed-off-by: Paolo Bonzini --- qapi/string-input-visitor.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c index 8f1bc41..793548a 100644 --- a/qapi/string-input-visitor.c +++ b/qapi/string-input-visitor.c @@ -14,6 +14,7 @@ #include "qapi/string-input-visitor.h" #include "qapi/visitor-impl.h" #include "qapi/qmp/qerror.h" +#include "qemu/option.h" struct StringInputVisitor { @@ -41,6 +42,28 @@ static void parse_type_int(Visitor *v, int64_t *obj, const char *name, *obj = val; } +static void parse_type_size(Visitor *v, uint64_t *obj, const char *name, + Error **errp) +{ + StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v); + Error *err = NULL; + uint64_t val; + + if (siv->string) { + parse_option_size(name, siv->string, &val, &err); + } else { + error_set(errp, QERR_INVALID_PARAMETER_TYPE, name ? name : "null", + "size"); + return; + } + if (err) { + error_propagate(errp, err); + return; + } + + *obj = val; +} + static void parse_type_bool(Visitor *v, bool *obj, const char *name, Error **errp) { @@ -128,6 +151,7 @@ StringInputVisitor *string_input_visitor_new(const char *str) v->visitor.type_enum = input_type_enum; v->visitor.type_int = parse_type_int; + v->visitor.type_size = parse_type_size; v->visitor.type_bool = parse_type_bool; v->visitor.type_str = parse_type_str; v->visitor.type_number = parse_type_number; -- 1.8.4.2