summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2011-09-30 11:19:38 +0200
committerMarc-André Lureau <marcandre.lureau@gmail.com>2012-03-20 15:31:30 +0100
commit69aecfc1bc4a957d6fa0edec5d65f7e0ed4cb0ad (patch)
treee0f842c12e76a541032aec0871d43e062905a5ea
parenta7cc3c6a5661d1b7bd632b55161c219684419f83 (diff)
spice_codegen: Always write a channels entry for an ifdef-ed channel
Before this patch, if a channel is defined conditionally in spice.proto (because it depends on external headers like the smartcard channel), spice_codegen would write an entry to the channels array in spice_get_*_channel_parser which would only take up a place in the array if the ifdef condition is true, thus moving up all other intializers one place when it is not true. This was causing issues (crashes) when building spice-gtk with the combination of usbredir support enabled and smartcard support disabled. This patch fixes this by adding #else { NULL, 0 }, to the generated code. Thanks to coolper chen <lixin.chen@saicocch.com> for reporting this! Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--python_modules/codegen.py6
-rw-r--r--python_modules/demarshal.py5
2 files changed, 11 insertions, 0 deletions
diff --git a/python_modules/codegen.py b/python_modules/codegen.py
index 6d53551..009cf95 100644
--- a/python_modules/codegen.py
+++ b/python_modules/codegen.py
@@ -328,6 +328,12 @@ class CodeWriter:
self.write("#ifdef %s" % (name)).newline()
self.indentation = indentation
+ def ifdef_else(self, name):
+ indentation = self.indentation
+ self.indentation = 0;
+ self.write("#else /* %s */" % (name)).newline()
+ self.indentation = indentation
+
def endif(self, name):
indentation = self.indentation
self.indentation = 0;
diff --git a/python_modules/demarshal.py b/python_modules/demarshal.py
index 2381e7f..c8c6837 100644
--- a/python_modules/demarshal.py
+++ b/python_modules/demarshal.py
@@ -1192,6 +1192,11 @@ def write_get_channel_parser(writer, channel_parsers, max_channel, is_server):
writer.write(",")
writer.newline()
if channel and channel.has_attr("ifdef"):
+ writer.ifdef_else(channel.attributes["ifdef"][0])
+ writer.write("{ NULL, 0 }")
+ if i != max_channel:
+ writer.write(",")
+ writer.newline()
writer.endif(channel.attributes["ifdef"][0])
writer.end_block(semicolon = True)