From aa441e3b27bc69087bca0d7eae2d9314ee7850e2 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 25 Aug 2020 12:56:13 +0930 Subject: [PATCH] tools/generate-wire.py: fix loop logic for towire_xxx_array We have to handle singletons which are arrays of variable-length entries: this needs to be a ptr-to-ptr. ```C struct blinded_payinfo { u32 fee_base_msat; u32 fee_proportional_millionths; u16 cltv_expiry_delta; u8 *features; }; ``` Before: ```C struct tlv_invoice_tlvs { ... struct blinded_payinfo *blindedpay; ``` After: ```C struct tlv_invoice_tlvs { ... struct blinded_payinfo **blindedpay; ``` Signed-off-by: Rusty Russell --- tools/gen/header_template | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/gen/header_template b/tools/gen/header_template index 2c0caad52..15f95bf84 100644 --- a/tools/gen/header_template +++ b/tools/gen/header_template @@ -69,7 +69,12 @@ struct ${tlv.struct_name()} { * tlv_field entries above to save on memory. */ % for msg in tlv.messages.values(): % if msg.singleton(): + ## Array of variable-length elems needs ptr-to-ptr! + % if msg.singleton().is_varlen() and msg.singleton().type_obj.is_varsize(): + ${msg.singleton().type_obj.type_name()} **${msg.name}; + % else: ${msg.singleton().type_obj.type_name()} *${msg.name}; + % endif % else: struct ${msg.struct_name()} *${msg.name}; % endif