From bd5869706dd628694e8134f43bdac08c729d8852 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 14 May 2020 17:27:59 +0200 Subject: struct_endianess.py: also recognise unnamed substructs Before this, the new dtap_header substruct construct would end up being split up in a weird way: struct dtap_header { uint8_t type; union { uint8_t link_id; /* Backward compatibility */ struct { uint8_t dlci_cc:2, dlci_spare:3, dlci_sapi:3; /* enum gsm0406_dlc_sapi */ }; }; uint8_t length; } __attribute__((packed)); would previously become struct dtap_header { uint8_t type; union { uint8_t link_id; /* Backward compatibility */ struct { #if OSMO_IS_LITTLE_ENDIAN uint8_t dlci_cc:2, dlci_spare:3, dlci_sapi:3; /* enum gsm0406_dlc_sapi */ }; }; uint8_t length; #elif OSMO_IS_BIG_ENDIAN /* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */ uint8_t dlci_sapi:3, dlci_spare:3, dlci_cc:2; }; }; uint8_t length; #endif } __attribute__((packed)); now becomes struct dtap_header { uint8_t type; union { uint8_t link_id; /* Backward compatibility */ struct { #if OSMO_IS_LITTLE_ENDIAN uint8_t dlci_cc:2, dlci_spare:3, dlci_sapi:3; /* enum gsm0406_dlc_sapi */ #elif OSMO_IS_BIG_ENDIAN /* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */ uint8_t dlci_sapi:3, dlci_spare:3, dlci_cc:2; #endif }; }; uint8_t length; } __attribute__((packed)); Change-Id: I3c4986ebd1e41aad8b279d6132b7e3b2539d7dc5 --- contrib/struct_endianess.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/struct_endianess.py b/contrib/struct_endianess.py index be73fbe2..6ce75fcb 100755 --- a/contrib/struct_endianess.py +++ b/contrib/struct_endianess.py @@ -17,6 +17,7 @@ re_struct_end = re.compile(r'^}[^;]*;\s*$') re_substruct_start = re.compile(r'^\s+struct\s*{\s*$') re_substruct_end = re.compile(r'^\s+}\s*([^;]*\s)[a-zA-Z_][a-zA-Z_0-9]*\s*;\s*$') +re_unnamed_substruct_end = re.compile(r'^\s+}\s*;\s*$') re_int_def = re.compile(r'(^\s*((const|unsigned|signed|char|int|long|int[0-9]+_t|uint[0-9]_t)\s+)+\s*)([^;]*;)', re.DOTALL | re.MULTILINE) @@ -73,7 +74,8 @@ def section_struct_body(struct_body_lines): line = struct_body_lines[j] if (re_substruct_start.fullmatch(line) - or re_substruct_end.fullmatch(line)): + or re_substruct_end.fullmatch(line) + or re_unnamed_substruct_end.fullmatch(line)): end_def() arbitrary_part.append(line) j += 1 -- cgit v1.2.3