diff mbox

[v4,07/28] string-input-visitor: Favor new visit_free() function

Message ID 1463632874-28559-8-git-send-email-eblake@redhat.com
State New
Headers show

Commit Message

Eric Blake May 19, 2016, 4:40 a.m. UTC
Now that we have a polymorphic visit_free(), we no longer need
string_input_visitor_cleanup(); which in turn means we no longer
need to return a subtype from string_input_visitor_new() nor a
public upcast function.

Signed-off-by: Eric Blake <eblake@redhat.com>

---
v4: new patch
---
 include/qapi/string-input-visitor.h |  5 +----
 qapi/string-input-visitor.c         | 19 +++++--------------
 qom/object.c                        | 25 +++++++++++--------------
 tests/test-string-input-visitor.c   | 22 +++++++---------------
 tests/test-visitor-serialization.c  |  6 +++---
 5 files changed, 27 insertions(+), 50 deletions(-)

Comments

Markus Armbruster June 1, 2016, 4:13 p.m. UTC | #1
Eric Blake <eblake@redhat.com> writes:

> Now that we have a polymorphic visit_free(), we no longer need
> string_input_visitor_cleanup(); which in turn means we no longer
> need to return a subtype from string_input_visitor_new() nor a
> public upcast function.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
[...]
> diff --git a/qom/object.c b/qom/object.c
> index 1562f7e..00dd68c 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -1216,7 +1216,7 @@ int object_property_get_enum(Object *obj, const char *name,
>  {
>      Error *err = NULL;
>      StringOutputVisitor *sov;
> -    StringInputVisitor *siv;
> +    Visitor *v;
>      char *str;
>      int ret;
>      ObjectProperty *prop = object_property_find(obj, name, errp);
> @@ -1243,13 +1243,12 @@ int object_property_get_enum(Object *obj, const char *name,
>          return 0;
>      }
>      str = string_output_get_string(sov);
> -    siv = string_input_visitor_new(str);
>      string_output_visitor_cleanup(sov);
> -    visit_type_enum(string_input_get_visitor(siv), name, &ret,
> -                    enumprop->strings, errp);
> +    v = string_input_visitor_new(str);
> +    visit_type_enum(v, name, &ret, enumprop->strings, errp);
>
>      g_free(str);
> -    string_input_visitor_cleanup(siv);
> +    visit_free(v);
>
>      return ret;
>  }
> @@ -1259,7 +1258,7 @@ void object_property_get_uint16List(Object *obj, const char *name,
>  {
>      Error *err = NULL;
>      StringOutputVisitor *ov;
> -    StringInputVisitor *iv;
> +    Visitor *v;
>      char *str;
>
>      ov = string_output_visitor_new(false);
> @@ -1270,11 +1269,11 @@ void object_property_get_uint16List(Object *obj, const char *name,
>          goto out;
>      }
>      str = string_output_get_string(ov);
> -    iv = string_input_visitor_new(str);
> -    visit_type_uint16List(string_input_get_visitor(iv), NULL, list, errp);
> +    v = string_input_visitor_new(str);
> +    visit_type_uint16List(v, NULL, list, errp);
>
>      g_free(str);
> -    string_input_visitor_cleanup(iv);
> +    visit_free(v);
>  out:
>      string_output_visitor_cleanup(ov);
>  }
> @@ -1282,11 +1281,9 @@ out:
>  void object_property_parse(Object *obj, const char *string,
>                             const char *name, Error **errp)
>  {
> -    StringInputVisitor *siv;
> -    siv = string_input_visitor_new(string);
> -    object_property_set(obj, string_input_get_visitor(siv), name, errp);
> -
> -    string_input_visitor_cleanup(siv);
> +    Visitor *v = string_input_visitor_new(string);

Blank line between declaration and statements, please.

> +    object_property_set(obj, v, name, errp);
> +    visit_free(v);
>  }
>
>  char *object_property_print(Object *obj, const char *name, bool human,
[...]
diff mbox

Patch

diff --git a/include/qapi/string-input-visitor.h b/include/qapi/string-input-visitor.h
index 7b76c2b..3355134 100644
--- a/include/qapi/string-input-visitor.h
+++ b/include/qapi/string-input-visitor.h
@@ -22,9 +22,6 @@  typedef struct StringInputVisitor StringInputVisitor;
  * QAPI structs, alternates, null, or arbitrary QTypes.  It also
  * requires a non-null list argument to visit_start_list().
  */
-StringInputVisitor *string_input_visitor_new(const char *str);
-void string_input_visitor_cleanup(StringInputVisitor *v);
-
-Visitor *string_input_get_visitor(StringInputVisitor *v);
+Visitor *string_input_visitor_new(const char *str);

 #endif
diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c
index dce5b42..a359e8e 100644
--- a/qapi/string-input-visitor.c
+++ b/qapi/string-input-visitor.c
@@ -325,25 +325,16 @@  static void parse_optional(Visitor *v, const char *name, bool *present)
     *present = true;
 }

-Visitor *string_input_get_visitor(StringInputVisitor *v)
-{
-    return &v->visitor;
-}
-
 static void string_input_free(Visitor *v)
 {
     StringInputVisitor *siv = to_siv(v);
-    string_input_visitor_cleanup(siv);
-}

-void string_input_visitor_cleanup(StringInputVisitor *v)
-{
-    g_list_foreach(v->ranges, free_range, NULL);
-    g_list_free(v->ranges);
-    g_free(v);
+    g_list_foreach(siv->ranges, free_range, NULL);
+    g_list_free(siv->ranges);
+    g_free(siv);
 }

-StringInputVisitor *string_input_visitor_new(const char *str)
+Visitor *string_input_visitor_new(const char *str)
 {
     StringInputVisitor *v;

@@ -363,5 +354,5 @@  StringInputVisitor *string_input_visitor_new(const char *str)
     v->visitor.free = string_input_free;

     v->string = str;
-    return v;
+    return &v->visitor;
 }
diff --git a/qom/object.c b/qom/object.c
index 1562f7e..00dd68c 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -1216,7 +1216,7 @@  int object_property_get_enum(Object *obj, const char *name,
 {
     Error *err = NULL;
     StringOutputVisitor *sov;
-    StringInputVisitor *siv;
+    Visitor *v;
     char *str;
     int ret;
     ObjectProperty *prop = object_property_find(obj, name, errp);
@@ -1243,13 +1243,12 @@  int object_property_get_enum(Object *obj, const char *name,
         return 0;
     }
     str = string_output_get_string(sov);
-    siv = string_input_visitor_new(str);
     string_output_visitor_cleanup(sov);
-    visit_type_enum(string_input_get_visitor(siv), name, &ret,
-                    enumprop->strings, errp);
+    v = string_input_visitor_new(str);
+    visit_type_enum(v, name, &ret, enumprop->strings, errp);

     g_free(str);
-    string_input_visitor_cleanup(siv);
+    visit_free(v);

     return ret;
 }
@@ -1259,7 +1258,7 @@  void object_property_get_uint16List(Object *obj, const char *name,
 {
     Error *err = NULL;
     StringOutputVisitor *ov;
-    StringInputVisitor *iv;
+    Visitor *v;
     char *str;

     ov = string_output_visitor_new(false);
@@ -1270,11 +1269,11 @@  void object_property_get_uint16List(Object *obj, const char *name,
         goto out;
     }
     str = string_output_get_string(ov);
-    iv = string_input_visitor_new(str);
-    visit_type_uint16List(string_input_get_visitor(iv), NULL, list, errp);
+    v = string_input_visitor_new(str);
+    visit_type_uint16List(v, NULL, list, errp);

     g_free(str);
-    string_input_visitor_cleanup(iv);
+    visit_free(v);
 out:
     string_output_visitor_cleanup(ov);
 }
@@ -1282,11 +1281,9 @@  out:
 void object_property_parse(Object *obj, const char *string,
                            const char *name, Error **errp)
 {
-    StringInputVisitor *siv;
-    siv = string_input_visitor_new(string);
-    object_property_set(obj, string_input_get_visitor(siv), name, errp);
-
-    string_input_visitor_cleanup(siv);
+    Visitor *v = string_input_visitor_new(string);
+    object_property_set(obj, v, name, errp);
+    visit_free(v);
 }

 char *object_property_print(Object *obj, const char *name, bool human,
diff --git a/tests/test-string-input-visitor.c b/tests/test-string-input-visitor.c
index 5a56920..5af4898 100644
--- a/tests/test-string-input-visitor.c
+++ b/tests/test-string-input-visitor.c
@@ -21,15 +21,15 @@ 
 #include "qapi/qmp/types.h"

 typedef struct TestInputVisitorData {
-    StringInputVisitor *siv;
+    Visitor *v;
 } TestInputVisitorData;

 static void visitor_input_teardown(TestInputVisitorData *data,
                                    const void *unused)
 {
-    if (data->siv) {
-        string_input_visitor_cleanup(data->siv);
-        data->siv = NULL;
+    if (data->v) {
+        visit_free(data->v);
+        data->v = NULL;
     }
 }

@@ -40,15 +40,9 @@  static
 Visitor *visitor_input_test_init(TestInputVisitorData *data,
                                  const char *string)
 {
-    Visitor *v;
-
-    data->siv = string_input_visitor_new(string);
-    g_assert(data->siv != NULL);
-
-    v = string_input_get_visitor(data->siv);
-    g_assert(v != NULL);
-
-    return v;
+    data->v = string_input_visitor_new(string);
+    g_assert(data->v);
+    return data->v;
 }

 static void test_visitor_in_int(TestInputVisitorData *data,
@@ -200,8 +194,6 @@  static void test_visitor_in_enum(TestInputVisitorData *data,

         visitor_input_teardown(data, NULL);
     }
-
-    data->siv = NULL;
 }

 /* Try to crash the visitors */
diff --git a/tests/test-visitor-serialization.c b/tests/test-visitor-serialization.c
index f83d019..49107f7 100644
--- a/tests/test-visitor-serialization.c
+++ b/tests/test-visitor-serialization.c
@@ -1057,7 +1057,7 @@  static void qmp_cleanup(void *datap)
 typedef struct StringSerializeData {
     char *string;
     StringOutputVisitor *sov;
-    StringInputVisitor *siv;
+    Visitor *siv;
 } StringSerializeData;

 static void string_serialize(void *native_in, void **datap,
@@ -1077,7 +1077,7 @@  static void string_deserialize(void **native_out, void *datap,

     d->string = string_output_get_string(d->sov);
     d->siv = string_input_visitor_new(d->string);
-    visit(string_input_get_visitor(d->siv), native_out, errp);
+    visit(d->siv, native_out, errp);
 }

 static void string_cleanup(void *datap)
@@ -1085,7 +1085,7 @@  static void string_cleanup(void *datap)
     StringSerializeData *d = datap;

     string_output_visitor_cleanup(d->sov);
-    string_input_visitor_cleanup(d->siv);
+    visit_free(d->siv);
     g_free(d->string);
     g_free(d);
 }