diff mbox

[v18,06/14] qapi: add SIZE type parser to string_input_visitor

Message ID e0a440b79c4940321fee73212095f860f7d5a90f.1392794450.git.hutao@cn.fujitsu.com
State New
Headers show

Commit Message

Hu Tao Feb. 19, 2014, 7:53 a.m. UTC
From: Igor Mammedov <imammedo@redhat.com>

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
---
 qapi/string-input-visitor.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

Comments

Igor Mammedov Feb. 19, 2014, 9:54 a.m. UTC | #1
On Wed, 19 Feb 2014 15:53:57 +0800
Hu Tao <hutao@cn.fujitsu.com> wrote:

> From: Igor Mammedov <imammedo@redhat.com>
> 
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
replace it with a better patch from Paolo that soon
will get merged into master:
http://www.mail-archive.com/qemu-devel@nongnu.org/msg216512.html


> ---
>  qapi/string-input-visitor.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c
> index 8f1bc41..a152f5d 100644
> --- a/qapi/string-input-visitor.c
> +++ b/qapi/string-input-visitor.c
> @@ -97,6 +97,23 @@ static void parse_type_number(Visitor *v, double *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);
> +    int64_t val;
> +    char *endp;
> +
> +    val = strtosz_suffix(siv->string ? siv->string : "", &endp,
> +                         STRTOSZ_DEFSUFFIX_B);
> +    if (val < 0 || *endp != '\0') {
> +        error_set(errp, QERR_INVALID_PARAMETER_VALUE, name,
> +                  "a size value representible as a non-negative int64");
> +        return;
> +    }
> +    *obj = val;
> +}
> +
>  static void parse_start_optional(Visitor *v, bool *present,
>                                   const char *name, Error **errp)
>  {
> @@ -131,6 +148,7 @@ StringInputVisitor *string_input_visitor_new(const char *str)
>      v->visitor.type_bool = parse_type_bool;
>      v->visitor.type_str = parse_type_str;
>      v->visitor.type_number = parse_type_number;
> +    v->visitor.type_size = parse_type_size;
>      v->visitor.start_optional = parse_start_optional;
>  
>      v->string = str;
diff mbox

Patch

diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c
index 8f1bc41..a152f5d 100644
--- a/qapi/string-input-visitor.c
+++ b/qapi/string-input-visitor.c
@@ -97,6 +97,23 @@  static void parse_type_number(Visitor *v, double *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);
+    int64_t val;
+    char *endp;
+
+    val = strtosz_suffix(siv->string ? siv->string : "", &endp,
+                         STRTOSZ_DEFSUFFIX_B);
+    if (val < 0 || *endp != '\0') {
+        error_set(errp, QERR_INVALID_PARAMETER_VALUE, name,
+                  "a size value representible as a non-negative int64");
+        return;
+    }
+    *obj = val;
+}
+
 static void parse_start_optional(Visitor *v, bool *present,
                                  const char *name, Error **errp)
 {
@@ -131,6 +148,7 @@  StringInputVisitor *string_input_visitor_new(const char *str)
     v->visitor.type_bool = parse_type_bool;
     v->visitor.type_str = parse_type_str;
     v->visitor.type_number = parse_type_number;
+    v->visitor.type_size = parse_type_size;
     v->visitor.start_optional = parse_start_optional;
 
     v->string = str;