Skip to content

Commit 4625d6c

Browse files
committed
Added support for simple macros
Signed-off-by: Cervenka Dusan <[email protected]>
1 parent 7670fd6 commit 4625d6c

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

dissect/cstruct/cstruct.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ def parse(self, data):
324324
self._constants(data)
325325
self._enums(data)
326326
self._structs(data)
327-
self._lookups(data, self.cstruct.consts)
327+
self._lookups(data)
328328

329329
def _constants(self, data):
330330
r = re.finditer(r'#define\s+(?P<name>[^\s]+)\s+(?P<value>[^\r\n]+)\s*\n', data)
@@ -375,7 +375,7 @@ def _parse_fields_enums(self, s):
375375
commentAttributes = self.parse_comment_block(d['commentBlock'])
376376

377377
field = re.finditer(
378-
r'(?P<key>[a-zA-z][^ =]*)[ ]*=?[ ]*(?P<value>[^ ]+)?',
378+
r'(?P<key>[a-zA-z][^ =]*)[ ]*=?[ ]*(?P<value>[^,/]+)?',
379379
d["value"],
380380
)
381381

@@ -484,7 +484,7 @@ def parse_comment_block(self,s):
484484

485485
return commentAttributes
486486

487-
def _lookups(self, data, consts):
487+
def _lookups(self, data):
488488
r = re.finditer(r'\$(?P<name>[^\s]+) = ({[^}]+})\w*\n', data)
489489

490490
for t in r:
@@ -493,6 +493,15 @@ def _lookups(self, data, consts):
493493
[(self.cstruct.consts[k], v) for k, v in d.items()]
494494
)
495495

496+
#support simple defines
497+
r = re.finditer(r'^[ \t]*#define (?P<name>[^\s]+)[ \t]+(?P<value>\(?-?[0-9]+U?\)?)\n?', data)
498+
499+
for t in r:
500+
d = ast.literal_eval(t.group(2))
501+
self.cstruct.lookups[t.group(1)] = dict(
502+
[(self.cstruct.consts[k], v) for k, v in d.items()]
503+
)
504+
496505

497506
class Instance(object):
498507
"""Holds parsed structure data."""

tests/test_basic.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,11 @@ def test_bytes_integer_signed_be():
151151

152152
def test_enum():
153153
d = """
154+
#define MyEnumVal 4
155+
154156
enum Test16 : uint16 {
155157
A = 0x1,
156-
B = 0x2
158+
B = 0x6 - MyEnumVal
157159
};
158160
159161
enum Test24 : uint24 {

0 commit comments

Comments
 (0)