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
diff --git a/contrib/struct_endianess.py b/contrib/struct_endianess.py
index be73fbe..6ce75fc 100755
--- a/contrib/struct_endianess.py
+++ b/contrib/struct_endianess.py
@@ -17,6 +17,7 @@
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 @@
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