diff options
-rw-r--r-- | python_modules/demarshal.py | 4 | ||||
-rw-r--r-- | python_modules/ptypes.py | 9 | ||||
-rw-r--r-- | python_modules/spice_parser.py | 3 |
3 files changed, 15 insertions, 1 deletions
diff --git a/python_modules/demarshal.py b/python_modules/demarshal.py index 209eafc..2252f37 100644 --- a/python_modules/demarshal.py +++ b/python_modules/demarshal.py @@ -72,6 +72,10 @@ def write_parser_helpers(writer): writer.statement("return val") writer.end_block() + writer.function("SPICE_GNUC_UNUSED consume_fd", "int", "uint8_t **ptr", True) + writer.statement("return -1") + writer.end_block() + writer.newline() writer.statement("typedef struct PointerInfo PointerInfo") writer.statement("typedef void (*message_destructor_t)(uint8_t *message)") diff --git a/python_modules/ptypes.py b/python_modules/ptypes.py index 7ab2771..9c10b57 100644 --- a/python_modules/ptypes.py +++ b/python_modules/ptypes.py @@ -1119,6 +1119,14 @@ class ProtocolType(Type): return self +class FdType(IntegerType): + + def primitive_type(self): + return "fd" + + def c_type(self): + return "int" + int8 = IntegerType(8, True) uint8 = IntegerType(8, False) int16 = IntegerType(16, True) @@ -1127,3 +1135,4 @@ int32 = IntegerType(32, True) uint32 = IntegerType(32, False) int64 = IntegerType(64, True) uint64 = IntegerType(64, False) +unix_fd = FdType(1, True) diff --git a/python_modules/spice_parser.py b/python_modules/spice_parser.py index 97af8b2..db3cc8d 100644 --- a/python_modules/spice_parser.py +++ b/python_modules/spice_parser.py @@ -56,6 +56,7 @@ def SPICE_BNF(): uint32_ = Keyword("uint32").setParseAction(replaceWith(ptypes.uint32)) int64_ = Keyword("int64").setParseAction(replaceWith(ptypes.int64)) uint64_ = Keyword("uint64").setParseAction(replaceWith(ptypes.uint64)) + unix_fd_ = Keyword("unix_fd").setParseAction(replaceWith(ptypes.unix_fd)) # keywords enum32_ = Keyword("enum32").setParseAction(replaceWith(32)) @@ -108,7 +109,7 @@ def SPICE_BNF(): # have to use longest match for type, in case a user-defined type name starts with a keyword type, like "channel_type" typeSpec << ( structSpec ^ int8_ ^ uint8_ ^ int16_ ^ uint16_ ^ - int32_ ^ uint32_ ^ int64_ ^ uint64_ ^ + int32_ ^ uint32_ ^ int64_ ^ uint64_ ^ unix_fd_ ^ typename).setName("type") flagsBody = enumBody = Group(lbrace + delimitedList(Group (enumname + Optional(equals + integer))) + Optional(comma) + rbrace) |