From eda5314cb539e65acf87d8cb9257b407cc667502 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 20 May 2019 14:34:24 +0930 Subject: [PATCH] tools/generate-wire.py: handle optional variable-length fields. We generated code which didn't compile (we never had one before though). Signed-off-by: Rusty Russell --- tools/generate-wire.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/generate-wire.py b/tools/generate-wire.py index cd1d6d15c..1e09e7740 100755 --- a/tools/generate-wire.py +++ b/tools/generate-wire.py @@ -453,8 +453,9 @@ class Message(object): # If we're handing a variable array, we need a ptr-to-ptr. if f.needs_ptr_to_ptr(): ptrs += '*' - # If each type is a variable length, we need a ptr to that. - if f.fieldtype.base() in varlen_structs: + # If each type is a variable length, we need a ptr to that, + # unless it's already optional, so we got one above. + if not f.optional and f.fieldtype.base() in varlen_structs: ptrs += '*' args.append(', {} {}{}'.format(f.fieldtype.name, ptrs, f.name)) @@ -500,7 +501,11 @@ class Message(object): else: if f.optional: assignable = f.fieldtype.is_assignable() - deref = '*' + # Optional varlens don't need to be derefed twice. + if basetype in varlen_structs: + deref = '' + else: + deref = '*' else: deref = '' assignable = f.is_assignable()