Skip to content

Commit a770f51

Browse files
committed
tools/generate_wire.py: make functions allocate the TLV.
Requiring the caller to allocate them is ugly, and differs from other types. This means we need a context arg if we don't have one already. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
1 parent 2b42227 commit a770f51

32 files changed

+199
-199
lines changed

channeld/channeld.c

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -664,17 +664,21 @@ static void handle_peer_add_htlc(struct peer *peer, const u8 *msg)
664664
enum channel_add_err add_err;
665665
struct htlc *htlc;
666666
#if EXPERIMENTAL_FEATURES
667-
struct tlv_update_add_tlvs *tlvs = tlv_update_add_tlvs_new(msg);
667+
struct tlv_update_add_tlvs *tlvs;
668668
#endif
669669
struct pubkey *blinding = NULL;
670670

671-
if (!fromwire_update_add_htlc(msg, &channel_id, &id, &amount,
672-
&payment_hash, &cltv_expiry,
673-
onion_routing_packet
671+
if (!fromwire_update_add_htlc
674672
#if EXPERIMENTAL_FEATURES
675-
, tlvs
673+
(msg, msg, &channel_id, &id, &amount,
674+
&payment_hash, &cltv_expiry,
675+
onion_routing_packet, &tlvs)
676+
#else
677+
(msg, &channel_id, &id, &amount,
678+
&payment_hash, &cltv_expiry,
679+
onion_routing_packet)
676680
#endif
677-
))
681+
)
678682
peer_failed_warn(peer->pps, &peer->channel_id,
679683
"Bad peer_add_htlc %s", tal_hex(msg, msg));
680684

@@ -1987,14 +1991,14 @@ static void handle_peer_shutdown(struct peer *peer, const u8 *shutdown)
19871991
{
19881992
struct channel_id channel_id;
19891993
u8 *scriptpubkey;
1990-
struct tlv_shutdown_tlvs *tlvs = tlv_shutdown_tlvs_new(tmpctx);
1994+
struct tlv_shutdown_tlvs *tlvs;
19911995
struct bitcoin_outpoint *wrong_funding;
19921996

19931997
/* Disable the channel. */
19941998
send_channel_update(peer, ROUTING_FLAGS_DISABLED);
19951999

19962000
if (!fromwire_shutdown(tmpctx, shutdown, &channel_id, &scriptpubkey,
1997-
tlvs))
2001+
&tlvs))
19982002
peer_failed_warn(peer->pps, &peer->channel_id,
19992003
"Bad shutdown %s", tal_hex(peer, shutdown));
20002004

@@ -2112,18 +2116,26 @@ static void handle_unexpected_reestablish(struct peer *peer, const u8 *msg)
21122116
struct secret your_last_per_commitment_secret;
21132117
struct pubkey my_current_per_commitment_point;
21142118
#if EXPERIMENTAL_FEATURES
2115-
struct tlv_channel_reestablish_tlvs *tlvs = tlv_channel_reestablish_tlvs_new(tmpctx);
2119+
struct tlv_channel_reestablish_tlvs *tlvs;
21162120
#endif
21172121

2118-
if (!fromwire_channel_reestablish(msg, &channel_id,
2119-
&next_commitment_number,
2120-
&next_revocation_number,
2121-
&your_last_per_commitment_secret,
2122-
&my_current_per_commitment_point
2122+
2123+
if (!fromwire_channel_reestablish
21232124
#if EXPERIMENTAL_FEATURES
2124-
, tlvs
2125+
(tmpctx, msg, &channel_id,
2126+
&next_commitment_number,
2127+
&next_revocation_number,
2128+
&your_last_per_commitment_secret,
2129+
&my_current_per_commitment_point,
2130+
&tlvs)
2131+
#else
2132+
(msg, &channel_id,
2133+
&next_commitment_number,
2134+
&next_revocation_number,
2135+
&your_last_per_commitment_secret,
2136+
&my_current_per_commitment_point)
21252137
#endif
2126-
))
2138+
)
21272139
peer_failed_warn(peer->pps, &peer->channel_id,
21282140
"Bad channel_reestablish %s", tal_hex(peer, msg));
21292141

@@ -2838,6 +2850,7 @@ static void peer_reconnect(struct peer *peer,
28382850
capture_premature_msg(&premature_msgs, msg));
28392851

28402852
#if EXPERIMENTAL_FEATURES
2853+
/* Initialize here in case we don't read it below! */
28412854
recv_tlvs = tlv_channel_reestablish_tlvs_new(tmpctx);
28422855

28432856
/* FIXME: v0.10.1 would send a different tlv set, due to older spec.
@@ -2856,13 +2869,13 @@ static void peer_reconnect(struct peer *peer,
28562869
"bad reestablish msg: %s %s",
28572870
peer_wire_name(fromwire_peektype(msg)),
28582871
tal_hex(msg, msg));
2859-
} else if (!fromwire_channel_reestablish(msg,
2872+
} else if (!fromwire_channel_reestablish(tmpctx, msg,
28602873
&channel_id,
28612874
&next_commitment_number,
28622875
&next_revocation_number,
28632876
&last_local_per_commitment_secret,
28642877
&remote_current_per_commitment_point,
2865-
recv_tlvs)) {
2878+
&recv_tlvs)) {
28662879
peer_failed_warn(peer->pps,
28672880
&peer->channel_id,
28682881
"bad reestablish msg: %s %s",

closingd/closingd.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,9 @@ receive_offer(struct per_peer_state *pps,
278278
} while (!msg);
279279

280280
their_sig.sighash_type = SIGHASH_ALL;
281-
close_tlvs = tlv_closing_signed_tlvs_new(msg);
282-
if (!fromwire_closing_signed(msg, &their_channel_id,
281+
if (!fromwire_closing_signed(msg, msg, &their_channel_id,
283282
&received_fee, &their_sig.s,
284-
close_tlvs))
283+
&close_tlvs))
285284
peer_failed_warn(pps, channel_id,
286285
"Expected closing_signed: %s",
287286
tal_hex(tmpctx, msg));

common/blindedpath.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ static struct tlv_encrypted_data_tlv *decrypt_encmsg(const tal_t *ctx,
197197
* - if the `enctlv` is not a valid TLV...
198198
* - MUST drop the message.
199199
*/
200-
encmsg = tlv_encrypted_data_tlv_new(ctx);
201-
if (!fromwire_tlv_encrypted_data_tlv(&cursor, &maxlen, encmsg)
200+
encmsg = fromwire_tlv_encrypted_data_tlv(ctx, &cursor, &maxlen);
201+
if (!encmsg
202202
|| !tlv_fields_valid(encmsg->fields, NULL, NULL))
203203
return tal_free(encmsg);
204204

common/bolt12.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -166,17 +166,18 @@ struct tlv_offer *offer_decode(const tal_t *ctx,
166166
const struct chainparams *must_be_chain,
167167
char **fail)
168168
{
169-
struct tlv_offer *offer = tlv_offer_new(ctx);
169+
struct tlv_offer *offer;
170170
const u8 *data;
171171
size_t dlen;
172172

173173
data = string_to_data(tmpctx, b12, b12len, "lno", &dlen, fail);
174174
if (!data)
175-
return tal_free(offer);
175+
return NULL;;
176176

177-
if (!fromwire_tlv_offer(&data, &dlen, offer)) {
177+
offer = fromwire_tlv_offer(ctx, &data, &dlen);
178+
if (!offer) {
178179
*fail = tal_fmt(ctx, "invalid offer data");
179-
return tal_free(offer);
180+
return NULL;
180181
}
181182

182183
*fail = check_features_and_chain(ctx,
@@ -219,17 +220,18 @@ struct tlv_invoice_request *invrequest_decode(const tal_t *ctx,
219220
const struct chainparams *must_be_chain,
220221
char **fail)
221222
{
222-
struct tlv_invoice_request *invrequest = tlv_invoice_request_new(ctx);
223+
struct tlv_invoice_request *invrequest;
223224
const u8 *data;
224225
size_t dlen;
225226

226227
data = string_to_data(tmpctx, b12, b12len, "lnr", &dlen, fail);
227228
if (!data)
228-
return tal_free(invrequest);
229+
return NULL;
229230

230-
if (!fromwire_tlv_invoice_request(&data, &dlen, invrequest)) {
231+
invrequest = fromwire_tlv_invoice_request(ctx, &data, &dlen);
232+
if (!invrequest) {
231233
*fail = tal_fmt(ctx, "invalid invoice_request data");
232-
return tal_free(invrequest);
234+
return NULL;
233235
}
234236

235237
*fail = check_features_and_chain(ctx,
@@ -258,17 +260,18 @@ struct tlv_invoice *invoice_decode_nosig(const tal_t *ctx,
258260
const struct chainparams *must_be_chain,
259261
char **fail)
260262
{
261-
struct tlv_invoice *invoice = tlv_invoice_new(ctx);
263+
struct tlv_invoice *invoice;
262264
const u8 *data;
263265
size_t dlen;
264266

265267
data = string_to_data(tmpctx, b12, b12len, "lni", &dlen, fail);
266268
if (!data)
267-
return tal_free(invoice);
269+
return NULL;
268270

269-
if (!fromwire_tlv_invoice(&data, &dlen, invoice)) {
271+
invoice = fromwire_tlv_invoice(ctx, &data, &dlen);
272+
if (!invoice) {
270273
*fail = tal_fmt(ctx, "invalid invoice data");
271-
return tal_free(invoice);
274+
return NULL;
272275
}
273276

274277
*fail = check_features_and_chain(ctx,

common/onion.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,6 @@ static struct tlv_tlv_payload *decrypt_tlv(const tal_t *ctx,
173173
const u8 *cursor;
174174
size_t max;
175175
int ret;
176-
struct tlv_tlv_payload *tlv;
177176

178177
subkey_from_hmac("rho", blinding_ss, &rho);
179178
if (tal_bytelen(enc) < crypto_aead_chacha20poly1305_ietf_ABYTES)
@@ -192,13 +191,9 @@ static struct tlv_tlv_payload *decrypt_tlv(const tal_t *ctx,
192191
if (ret != 0)
193192
return NULL;
194193

195-
tlv = tlv_tlv_payload_new(ctx);
196194
cursor = dec;
197195
max = tal_bytelen(dec);
198-
if (!fromwire_tlv_tlv_payload(&cursor, &max, tlv))
199-
return tal_free(tlv);
200-
201-
return tlv;
196+
return fromwire_tlv_tlv_payload(ctx, &cursor, &max);
202197
}
203198
#endif /* EXPERIMENTAL_FEATURES */
204199

@@ -219,8 +214,8 @@ struct onion_payload *onion_decode(const tal_t *ctx,
219214
if (!pull_payload_length(&cursor, &max, true, &len))
220215
goto general_fail;
221216

222-
tlv = tlv_tlv_payload_new(p);
223-
if (!fromwire_tlv_tlv_payload(&cursor, &max, tlv)) {
217+
tlv = fromwire_tlv_tlv_payload(p, &cursor, &max);
218+
if (!tlv) {
224219
/* FIXME: Fill in correct thing here! */
225220
goto general_fail;
226221
}

common/test/run-blindedpath_onion.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ static u8 *next_onion(const tal_t *ctx, u8 *omsg,
132132
cursor = rs->raw_payload;
133133
max = tal_bytelen(rs->raw_payload);
134134
maxlen = fromwire_bigsize(&cursor, &max);
135-
om = tlv_onionmsg_payload_new(tmpctx);
136-
assert(fromwire_tlv_onionmsg_payload(&cursor, &maxlen, om));
135+
om = fromwire_tlv_onionmsg_payload(tmpctx, &cursor, &maxlen);
137136

138137
if (rs->nextcase == ONION_END)
139138
return NULL;

common/test/run-bolt12_decode.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,16 +68,16 @@ u8 *fromwire_tal_arrn(const tal_t *ctx UNNEEDED,
6868
const u8 **cursor UNNEEDED, size_t *max UNNEEDED, size_t num UNNEEDED)
6969
{ fprintf(stderr, "fromwire_tal_arrn called!\n"); abort(); }
7070
/* Generated stub for fromwire_tlv_invoice */
71-
bool fromwire_tlv_invoice(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
72-
struct tlv_invoice * record UNNEEDED)
71+
struct tlv_invoice *fromwire_tlv_invoice(const tal_t *ctx UNNEEDED,
72+
const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
7373
{ fprintf(stderr, "fromwire_tlv_invoice called!\n"); abort(); }
7474
/* Generated stub for fromwire_tlv_invoice_request */
75-
bool fromwire_tlv_invoice_request(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
76-
struct tlv_invoice_request * record UNNEEDED)
75+
struct tlv_invoice_request *fromwire_tlv_invoice_request(const tal_t *ctx UNNEEDED,
76+
const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
7777
{ fprintf(stderr, "fromwire_tlv_invoice_request called!\n"); abort(); }
7878
/* Generated stub for fromwire_tlv_offer */
79-
bool fromwire_tlv_offer(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
80-
struct tlv_offer * record UNNEEDED)
79+
struct tlv_offer *fromwire_tlv_offer(const tal_t *ctx UNNEEDED,
80+
const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
8181
{ fprintf(stderr, "fromwire_tlv_offer called!\n"); abort(); }
8282
/* Generated stub for fromwire_u32 */
8383
u32 fromwire_u32(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
@@ -110,15 +110,6 @@ void sighash_from_merkle(const char *messagename UNNEEDED,
110110
const struct sha256 *merkle UNNEEDED,
111111
struct sha256 *sighash UNNEEDED)
112112
{ fprintf(stderr, "sighash_from_merkle called!\n"); abort(); }
113-
/* Generated stub for tlv_invoice_new */
114-
struct tlv_invoice *tlv_invoice_new(const tal_t *ctx UNNEEDED)
115-
{ fprintf(stderr, "tlv_invoice_new called!\n"); abort(); }
116-
/* Generated stub for tlv_invoice_request_new */
117-
struct tlv_invoice_request *tlv_invoice_request_new(const tal_t *ctx UNNEEDED)
118-
{ fprintf(stderr, "tlv_invoice_request_new called!\n"); abort(); }
119-
/* Generated stub for tlv_offer_new */
120-
struct tlv_offer *tlv_offer_new(const tal_t *ctx UNNEEDED)
121-
{ fprintf(stderr, "tlv_offer_new called!\n"); abort(); }
122113
/* Generated stub for towire */
123114
void towire(u8 **pptr UNNEEDED, const void *data UNNEEDED, size_t len UNNEEDED)
124115
{ fprintf(stderr, "towire called!\n"); abort(); }

common/test/run-bolt12_merkle-json.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,16 +158,18 @@ int main(int argc, char *argv[])
158158

159159
/* Now do it via type-specific fromwire. */
160160
if (streq(tlvtype, "n1")) {
161-
struct tlv_n1 *n1 = tlv_n1_new(tmpctx);
161+
struct tlv_n1 *n1;
162162
size_t len = tal_bytelen(tlv);
163-
assert(fromwire_tlv_n1(&tlv, &len, n1));
163+
n1 = fromwire_tlv_n1(tmpctx, &tlv, &len);
164+
assert(n1);
164165
assert(len == 0);
165166
merkle_tlv(n1->fields, &merkle);
166167
assert(sha256_eq(&merkle, &expected_merkle));
167168
} else if (streq(tlvtype, "offer")) {
168-
struct tlv_offer *offer = tlv_offer_new(tmpctx);
169+
struct tlv_offer *offer;
169170
size_t len = tal_bytelen(tlv);
170-
assert(fromwire_tlv_offer(&tlv, &len, offer));
171+
offer = fromwire_tlv_offer(tmpctx, &tlv, &len);
172+
assert(offer);
171173
assert(len == 0);
172174
merkle_tlv(offer->fields, &merkle);
173175
assert(sha256_eq(&merkle, &expected_merkle));

common/test/run-bolt12_merkle.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,7 @@ static void merkle_n1(const struct tlv_n1 *n1, struct sha256 *test_m)
117117
towire_tlv_n1(&v, n1);
118118

119119
len = tal_bytelen(v);
120-
tmp = tlv_n1_new(tmpctx);
121-
if (!fromwire_tlv_n1(cast_const2(const u8 **, &v), &len, tmp))
122-
abort();
120+
tmp = fromwire_tlv_n1(tmpctx, cast_const2(const u8 **, &v), &len);
123121
assert(len == 0);
124122

125123
merkle_tlv(tmp->fields, test_m);

common/test/run-bolt12_period.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@ u8 *fromwire_tal_arrn(const tal_t *ctx UNNEEDED,
7171
const u8 **cursor UNNEEDED, size_t *max UNNEEDED, size_t num UNNEEDED)
7272
{ fprintf(stderr, "fromwire_tal_arrn called!\n"); abort(); }
7373
/* Generated stub for fromwire_tlv_invoice */
74-
bool fromwire_tlv_invoice(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
75-
struct tlv_invoice * record UNNEEDED)
74+
struct tlv_invoice *fromwire_tlv_invoice(const tal_t *ctx UNNEEDED,
75+
const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
7676
{ fprintf(stderr, "fromwire_tlv_invoice called!\n"); abort(); }
7777
/* Generated stub for fromwire_tlv_invoice_request */
78-
bool fromwire_tlv_invoice_request(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
79-
struct tlv_invoice_request * record UNNEEDED)
78+
struct tlv_invoice_request *fromwire_tlv_invoice_request(const tal_t *ctx UNNEEDED,
79+
const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
8080
{ fprintf(stderr, "fromwire_tlv_invoice_request called!\n"); abort(); }
8181
/* Generated stub for fromwire_tlv_offer */
82-
bool fromwire_tlv_offer(const u8 **cursor UNNEEDED, size_t *max UNNEEDED,
83-
struct tlv_offer * record UNNEEDED)
82+
struct tlv_offer *fromwire_tlv_offer(const tal_t *ctx UNNEEDED,
83+
const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
8484
{ fprintf(stderr, "fromwire_tlv_offer called!\n"); abort(); }
8585
/* Generated stub for fromwire_u32 */
8686
u32 fromwire_u32(const u8 **cursor UNNEEDED, size_t *max UNNEEDED)
@@ -113,15 +113,6 @@ void sighash_from_merkle(const char *messagename UNNEEDED,
113113
const struct sha256 *merkle UNNEEDED,
114114
struct sha256 *sighash UNNEEDED)
115115
{ fprintf(stderr, "sighash_from_merkle called!\n"); abort(); }
116-
/* Generated stub for tlv_invoice_new */
117-
struct tlv_invoice *tlv_invoice_new(const tal_t *ctx UNNEEDED)
118-
{ fprintf(stderr, "tlv_invoice_new called!\n"); abort(); }
119-
/* Generated stub for tlv_invoice_request_new */
120-
struct tlv_invoice_request *tlv_invoice_request_new(const tal_t *ctx UNNEEDED)
121-
{ fprintf(stderr, "tlv_invoice_request_new called!\n"); abort(); }
122-
/* Generated stub for tlv_offer_new */
123-
struct tlv_offer *tlv_offer_new(const tal_t *ctx UNNEEDED)
124-
{ fprintf(stderr, "tlv_offer_new called!\n"); abort(); }
125116
/* Generated stub for to_bech32_charset */
126117
char *to_bech32_charset(const tal_t *ctx UNNEEDED,
127118
const char *hrp UNNEEDED, const u8 *data UNNEEDED)

common/test/run-gossmap_local.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,16 +278,15 @@ static void check_nannounce(const u8 *nannounce,
278278
u32 timestamp;
279279
u8 rgb_color[3], alias[32];
280280
struct node_id node_id;
281-
struct tlv_node_ann_tlvs *na_tlvs
282-
= tlv_node_ann_tlvs_new(tmpctx);
281+
struct tlv_node_ann_tlvs *na_tlvs;
283282
assert(fromwire_node_announcement(nannounce, nannounce,
284283
&sig, &features,
285284
&timestamp,
286285
&node_id,
287286
rgb_color,
288287
alias,
289288
&addresses,
290-
na_tlvs));
289+
&na_tlvs));
291290
assert(node_id_eq(&node_id, n));
292291
}
293292

connectd/onion_message.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ void handle_onion_message(struct daemon *daemon,
101101
return;
102102
}
103103

104-
om = tlv_onionmsg_payload_new(msg);
105-
if (!fromwire_tlv_onionmsg_payload(&cursor, &maxlen, om)) {
104+
om = fromwire_tlv_onionmsg_payload(msg, &cursor, &maxlen);
105+
if (!om) {
106106
status_peer_debug(&peer->id, "onion msg: invalid onionmsg_payload %s",
107107
tal_hex(tmpctx, rs->raw_payload));
108108
return;

0 commit comments

Comments
 (0)