[Spice-devel] [PATCH 25/33] Handle array

Frediano Ziglio fziglio at redhat.com
Wed Jul 1 10:10:17 PDT 2015


If just data increment the pointer if not handle the items with
a loop.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 python_modules/dissector.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/python_modules/dissector.py b/python_modules/dissector.py
index c9331cd..6e9f0d6 100644
--- a/python_modules/dissector.py
+++ b/python_modules/dissector.py
@@ -227,6 +227,20 @@ def write_switch(writer, container, switch, dest, scope):
 def write_array(writer, container, member, nelements, array, dest, scope):
     assert(container and member)
 
+    element_type = array.element_type
+
+    if element_type == ptypes.uint8 or element_type == ptypes.int8:
+        writer.increment("offset", nelements)
+        return
+
+    with writer.index() as index:
+        with writer.for_loop(index, nelements) as array_scope:
+            if element_type.is_primitive():
+                write_member_primitive(writer, container, member, element_type, dest, scope)
+            else:
+                assert(element_type.is_struct())
+                write_struct(writer, member, element_type, index, dest, scope)
+
 def write_pointer(writer, container, member, t, dest, scope):
     assert(t.is_pointer())
 
@@ -245,7 +259,6 @@ def write_struct_func(writer, t, func_name, index):
     writer.statement('return offset')
     writer.end_block()
 
-
 def write_struct(writer, member, t, index, dest, scope):
     assert(t.is_struct())
 
-- 
2.1.0



More information about the Spice-devel mailing list