qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/9] qapi_c_arrays.diff


From: Stefan Berger
Subject: Re: [Qemu-devel] [PATCH 2/9] qapi_c_arrays.diff
Date: Wed, 13 Mar 2013 18:54:29 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

On 03/13/2013 02:56 PM, Joel Schopp wrote:
Forward ported Mike's previously sent patch
(see http://lists.gnu.org/archive/html/qemu-devel/2012-10/msg05782.html ) in my
series since it implements a qapi array interface the ASN.1 BER visitor needs.

Generally these will be serialized into lists, but the
representation can be of any form so long as it can
be deserialized into a single-dimension C array.

Cc: Michael Tsirkin <address@hidden>
Cc: Paolo Bonzini <address@hidden>
Signed-off-by: Michael Roth <address@hidden>
Signed-off-by: Joel Schopp <address@hidden>
---
  include/qapi/visitor-impl.h |    4 ++++
  include/qapi/visitor.h      |    4 ++++
  qapi/qapi-visit-core.c      |   25 +++++++++++++++++++++++++
  3 files changed, 33 insertions(+)

+++ b/include/qapi/visitor.h
@@ -51,5 +51,9 @@ void visit_type_size(Visitor *v, uint64_t *obj, const char 
*name, Error **errp);
  void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp);
  void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp);
  void visit_type_number(Visitor *v, double *obj, const char *name, Error 
**errp);
+void visit_start_carray(Visitor *v, void **obj, const char *name,
+                        size_t elem_count, size_t elem_size, Error **errp);
+void visit_next_carray(Visitor *v, Error **errp);
+void visit_end_carray(Visitor *v, Error **errp);

  #endif
diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c
index 401ee6e..d9982f8 100644
--- a/qapi/qapi-visit-core.c
+++ b/qapi/qapi-visit-core.c
@@ -313,3 +313,28 @@ void input_type_enum(Visitor *v, int *obj, const char 
*strings[],
      g_free(enum_str);
      *obj = value;
  }
+
+void visit_start_carray(Visitor *v, void **obj, const char *name,
+                        size_t elem_count, size_t elem_size, Error **errp)
+{
+    g_assert(v->start_carray);
+    if (!error_is_set(errp)) {
+        v->start_carray(v, obj, name, elem_count, elem_size, errp);
+    }

So this is a c-like array with a given number of elements and each element having to have the same size? As long as all use cases for QEMU can live with this, I guess it's fine, though an array of sized buffers, each with different size, may be more 'general'. How many other callers are there so that we can talk about disparities between visitors as mentioned in the comment in 5/9? At least we would have immediate callers for the sized buffer interface.

http://lists.gnu.org/archive/html/qemu-devel/2013-03/msg02254.html

Regards,
   Stefan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]