On Thu, Jun 08, 2023 at 09:17:38PM -0500, Eric Blake wrote: > In order to more easily add a third reply type with an even larger > header, but where the payload will look the same for both structured > and extended replies, it is nicer if simple and structured replies are > nested inside the same layer of sbuf.reply.hdr. Doing this also lets > us add an alias for accessing the cookie directly without picking > which header type we have on hand. > [...] > > Although we do not use union payload with simple replies, a later > patch does use payload for two out of the three possible headers, and > it does not hurt for sbuf to call out storage for more than we use on > a particular state machine sequence. The commit is largely > mechanical, and there should be no semantic change. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > lib/internal.h | 16 +++++-- > generator/states-reply.c | 35 +++++++------- > generator/states-reply-chunk.c | 84 ++++++++++++++++----------------- > generator/states-reply-simple.c | 4 +- > 4 files changed, 76 insertions(+), 63 deletions(-)
Here's what I'm leaning towards squashing in, now that patch 2/4 landed as 2e34ceb8. diff --git a/generator/states-reply.c b/generator/states-reply.c index af5f6135..0d200513 100644 --- a/generator/states-reply.c +++ b/generator/states-reply.c @@ -19,6 +19,11 @@ #include <assert.h> #include <stddef.h> +#define ASSERT_MEMBER_ALIAS(type, member_a, member_b) \ + STATIC_ASSERT (offsetof (type, member_a) == offsetof (type, member_b) && \ + sizeof ((type *)NULL)->member_a == \ + sizeof ((type *)NULL)->member_b, member_alias) + /* State machine for receiving reply messages from the server. * * Note that we never block while in this sub-group. If there is @@ -70,12 +75,10 @@ REPLY.START: * structs (an intentional design decision in the NBD spec when * structured replies were added). */ - STATIC_ASSERT (offsetof (union reply_header, simple.cookie) == - offsetof (union reply_header, cookie), - _cookie_aliasing_simple); - STATIC_ASSERT (offsetof (union reply_header, structured.cookie) == - offsetof (union reply_header, cookie), - _cookie_aliasing_structured); + ASSERT_MEMBER_ALIAS (union reply_header, simple.magic, magic); + ASSERT_MEMBER_ALIAS (union reply_header, simple.cookie, cookie); + ASSERT_MEMBER_ALIAS (union reply_header, structured.magic, magic); + ASSERT_MEMBER_ALIAS (union reply_header, structured.cookie, cookie); assert (h->reply_cmd == NULL); assert (h->rlen == 0); -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs