tools/generate-wire.py: fix loop logic for towire_xxx_array

has_len_fields() doesn't cover our blacklist of variable types, so if
we have an array of them, this logic is wrong.  This happens in the
the bolt13 patch:

```C
struct tlv_offer_tlvs_blindedpath {
        struct pubkey blinding;
        struct onionmsg_path **path;
};
```

Before:
wire/gen_bolt13_tlv.c:
```C
		for (size_t i = 0; i < tal_count(r->blindedpath->path); i++)
		towire_onionmsg_path(&ptr, r->blindedpath->path + i);
```
After:
```C
		for (size_t i = 0; i < tal_count(r->blindedpath->path); i++)
		towire_onionmsg_path(&ptr, r->blindedpath->path[i]);
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2020-08-25 12:55:13 +09:30
parent 76813d6f90
commit 897c53ce1c

View File

@ -53,7 +53,7 @@ bool ${enum_set['name']}_is_defined(u16 type)
towire_${type_obj.name}_array(${ptr}, ${fieldname}, ${f.size('tal_count(' + fieldname + ')')});
% else:
for (size_t i = 0; i < ${f.size('tal_count(' + fieldname + ')')}; i++)
% if type_obj.is_assignable() or type_obj.has_len_fields():
% if type_obj.is_assignable() or type_obj.is_varsize():
towire_${type_obj.name}(${ptr}, ${fieldname}[i]);
% else:
towire_${type_obj.name}(${ptr}, ${fieldname} + i);