[Libguestfs] [PATCH nbdkit 3/3] server: filters: Remove struct b_h.

Richard W.M. Jones rjones at redhat.com
Wed Feb 12 14:26:19 UTC 2020


On Wed, Feb 12, 2020 at 07:56:38AM -0600, Eric Blake wrote:
> On 2/12/20 7:40 AM, Richard W.M. Jones wrote:
> >This was previously used as ‘nxdata’ and stored a tuple of ’b->next’
> >and the real filter handle.  However after recent changes we don't
> >need it.  We can use ‘b->next’ as nxdata, and the handle is passed to
> >us by the calling functions.
> >
> >Inspired by Eric Blakes observations in this email:
> 
> Blake's
> 
> >https://www.redhat.com/archives/libguestfs/2020-February/msg00092.html
> >---
> >  server/filters.c | 217 ++++++++++++++++-------------------------------
> >  1 file changed, 73 insertions(+), 144 deletions(-)
> >
> 
> >@@ -216,201 +205,181 @@ plugin_magic_config_key (struct backend *b)
> >  static int
> >  next_open (void *nxdata, int readonly)
> >  {
> >-  struct b_h *b_h = nxdata;
> >+  struct backend *b_next = nxdata;
> >-  return backend_open (b_h->b, readonly);
> >+  return backend_open (b_next, readonly);
> >  }
> 
> With this change, 'next_open' and '(int (*)(void *,
> int))backend_open' now have identical semantics.  I'm trying to see
> if there are further changes we could make that would alleviate the
> need for function casts. I don't know if it is worth changing
> nbdkit-filter.h to use 'struct backend *' instead of 'void *' (while
> leaving struct backend an incomplete type in the public header) - it
> would be ABI compatible, and although it would require
> recompilation, we already state that filter recompilation is par for
> the course (since only plugins promise API compatibility).

Yes my original version had stuff like:

static struct nbdkit_next_ops next_ops = {
  .reopen = (void *) backend_reopen,
  .get_size = (void *) backend_get_size,

but that wasn't very safe, and exporting struct backend, even
opaquely, to the public header didn't sound like a good idea either.
(Are C structs always treated the same by name?  That could cause a
problem for a filter which used "struct backend" for some internal
reason I think.)

> But one step at a time; your patch is fine as-is.
> ACK

Thanks - pushed.  Hopefully shouldn't break your new filter.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html




More information about the Libguestfs mailing list