Browse Source

qapi: Add size parser to StringInputVisitor

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Paolo Bonzini 11 years ago
parent
commit
a5829ccfc3
1 changed files with 24 additions and 0 deletions
  1. 24 0
      qapi/string-input-visitor.c

+ 24 - 0
qapi/string-input-visitor.c

@@ -14,6 +14,7 @@
 #include "qapi/string-input-visitor.h"
 #include "qapi/string-input-visitor.h"
 #include "qapi/visitor-impl.h"
 #include "qapi/visitor-impl.h"
 #include "qapi/qmp/qerror.h"
 #include "qapi/qmp/qerror.h"
+#include "qemu/option.h"
 
 
 struct StringInputVisitor
 struct StringInputVisitor
 {
 {
@@ -41,6 +42,28 @@ static void parse_type_int(Visitor *v, int64_t *obj, const char *name,
     *obj = val;
     *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,
 static void parse_type_bool(Visitor *v, bool *obj, const char *name,
                             Error **errp)
                             Error **errp)
 {
 {
@@ -128,6 +151,7 @@ StringInputVisitor *string_input_visitor_new(const char *str)
 
 
     v->visitor.type_enum = input_type_enum;
     v->visitor.type_enum = input_type_enum;
     v->visitor.type_int = parse_type_int;
     v->visitor.type_int = parse_type_int;
+    v->visitor.type_size = parse_type_size;
     v->visitor.type_bool = parse_type_bool;
     v->visitor.type_bool = parse_type_bool;
     v->visitor.type_str = parse_type_str;
     v->visitor.type_str = parse_type_str;
     v->visitor.type_number = parse_type_number;
     v->visitor.type_number = parse_type_number;