# HG changeset patch # User Josef 'Jeff' Sipek # Date 1726278586 14400 # Fri Sep 13 21:49:46 2024 -0400 # Node ID 38e3cbf1bb0712069545aae1c11d2d2f48724fd4 # Parent c088266135b2b1808461dd29cc701a775c01af62 rpc: add support for announcement tracking of uint16_t values This will be used for the RPC port number. Signed-off-by: Josef 'Jeff' Sipek diff --git a/rpc/announce-track.c b/rpc/announce-track.c --- a/rpc/announce-track.c +++ b/rpc/announce-track.c @@ -205,6 +205,32 @@ size_t size; }; +static void __set_info_int(struct info_mapping *entry, uint64_t v) +{ + union { + uint64_t *u64; + uint16_t *u16; + void *v; + } ptr = { + .v = entry->ptr, + }; + + switch (entry->size) { + case sizeof(uint16_t): + if (v > UINT16_MAX) + return; + + *ptr.u16 = v; + break; + case sizeof(uint64_t): + *ptr.u64 = v; + break; + default: + panic("unhandled %s size of %zu", __func__, + entry->size); + } +} + static void announce_track_info_msg(struct instance *inst, struct announce_msg *msg) { @@ -263,13 +289,10 @@ case VT_INT: { struct val *v; - ASSERT3U(map[i].size, ==, sizeof(uint64_t)); - v = nvpair_value(cur); + __set_info_int(&map[i], v->i); + val_putref(v); - *((uint64_t *) map[i].ptr) = v->i; - - val_putref(v); break; } case VT_NULL: