diff options
author | Christian Linhart <chris@demorecorder.com> | 2016-01-18 06:52:02 +0100 |
---|---|---|
committer | Christian Linhart <chris@demorecorder.com> | 2016-01-27 06:39:14 +0100 |
commit | 21b11ee553a0bf074e9672be9107e11c97704195 (patch) | |
tree | 689ea65518835c71fdfdc274cdd201ce02f99c77 | |
parent | 811e038c9501dfe95301d5f148be1f2b1bafbc1e (diff) |
optionally enforce serialization of pads
From now on, due to a patch in libxcb, pads will not be serialized
anymore. This is to maintain ABI-compatibility when adding
explicit align pads.
However, some align pads were already be serialized in prior
official versions of libxcb. Therefore we need a method to
enforce serialization, so we can maintainn ABI compatibility
with that legacy.
Signed-off-by: Christian Linhart <chris@demorecorder.com>
-rw-r--r-- | doc/xml-xcb.txt | 9 | ||||
-rw-r--r-- | xcbgen/xtypes.py | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/doc/xml-xcb.txt b/doc/xml-xcb.txt index 12c0881..9cef1de 100644 --- a/doc/xml-xcb.txt +++ b/doc/xml-xcb.txt @@ -191,11 +191,18 @@ enum; the value is restricted to one of the constants named in the enum. "mask" refers to an exhaustive enum to be used as a bitmask. "altmask" may be a mask from the referred enum, but it need not be. -<pad bytes="integer" /> +<pad bytes="integer" serialize="bool" /> This element declares some padding in a data structure. The bytes attribute declares the number of bytes of padding. + If serialize="true", then the pad will be serialized/deserialized. + This is only needed for ABI compatibility with legacy. + Newly added pads should not be defined with serialize="true". + + The serialize attribute may be omitted. + Default is serialize="false". + <field type="identifier" name="identifier" /> This element represents a field in a data structure. The type attribute diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py index 1f604de..c3b5758 100644 --- a/xcbgen/xtypes.py +++ b/xcbgen/xtypes.py @@ -6,6 +6,7 @@ from xcbgen.align import Alignment, AlignmentLog import __main__ verbose_align_log = False +true_values = ['true', '1', 'yes'] class Type(object): ''' @@ -429,6 +430,7 @@ class PadType(Type): if elt != None: self.nmemb = int(elt.get('bytes', "1"), 0) self.align = int(elt.get('align', "1"), 0) + self.serialize = elt.get('serialize', "false").lower() in true_values # pads don't require any alignment at their start self.required_start_align = Alignment(1,0) |