Files
lightning/common/onionreply.c
Rusty Russell 2aad3ffcf8 common: tal_dup_talarr() helper.
This is a common thing to do, so create a macro.

Unfortunately, it still needs the type arg, because the paramter may
be const, and the return cannot be, and C doesn't have a general
"(-const)" cast.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2020-02-27 14:16:16 +10:30

41 lines
1.1 KiB
C

#include <ccan/cast/cast.h>
#include <common/onionreply.h>
#include <wire/wire.h>
void towire_onionreply(u8 **cursor, const struct onionreply *r)
{
towire_u16(cursor, tal_count(r->contents));
towire_u8_array(cursor, r->contents, tal_count(r->contents));
}
struct onionreply *fromwire_onionreply(const tal_t *ctx,
const u8 **cursor, size_t *max)
{
struct onionreply *r = tal(ctx, struct onionreply);
r->contents = tal_arr(r, u8, fromwire_u16(cursor, max));
fromwire_u8_array(cursor, max, r->contents, tal_count(r->contents));
if (!*cursor)
return tal_free(r);
return r;
}
struct onionreply *dup_onionreply(const tal_t *ctx,
const struct onionreply *r TAKES)
{
struct onionreply *n;
if (taken(r))
return cast_const(struct onionreply *, tal_steal(ctx, r));
n = tal(ctx, struct onionreply);
n->contents = tal_dup_talarr(n, u8, r->contents);
return n;
}
struct onionreply *new_onionreply(const tal_t *ctx, const u8 *contents TAKES)
{
struct onionreply *r = tal(ctx, struct onionreply);
r->contents = tal_dup_talarr(r, u8, contents);
return r;
}