On Wed, Aug 02, 2023 at 08:50:23PM -0500, Eric Blake wrote: > See the earlier commit "Add Extent64 arg type" for rationale in > supporting a new generator arg type. This patch adds the C bindings > for use of Extent64: it exposes a new 'struct nbd_extent' in > <libnbd.h>, as well as the code to generate the C bindings for passing > an extent64_closure once a new API uses the type in an upcoming patch. > > Note that 'struct nbd_block_descriptor_64' in lib/nbd-protocol.h is > exactly the same as what we want to use in C. But it is easier to > stick a new public type in <libnbd.h> than to figure out how to expose > just part of a header we only want to use internally, and leaves us > free to alter nbd-protocol.h (which is shared with nbdkit) without > affecting public API. > > Signed-off-by: Eric Blake <ebl...@redhat.com> > --- > > v4: split out of larger patch [Laszlo] > --- > generator/API.mli | 2 +- > generator/C.ml | 12 ++++++++++++ > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/generator/API.mli b/generator/API.mli > index 80633018..96626c9b 100644 > --- a/generator/API.mli > +++ b/generator/API.mli > @@ -52,7 +52,7 @@ and > | BytesPersistOut of string * string > | Closure of closure (** function pointer + void *opaque *) > | Enum of string * enum (** enum/union type, int in C *) > -| Extent64 of string (** extent descriptor *) > +| Extent64 of string (** extent descriptor, struct nbd_extent in C *)
With an improved comment / the comment change hunk here dropped (see my review of the prior commit): Reviewed-by: Richard W.M. Jones <rjo...@redhat.com> > | Fd of string (** file descriptor *) > | Flags of string * flags (** flags, uint32_t in C *) > | Int of string (** small int *) > diff --git a/generator/C.ml b/generator/C.ml > index 606ba1e0..e5a2879b 100644 > --- a/generator/C.ml > +++ b/generator/C.ml > @@ -308,6 +308,11 @@ and > pr "%s, " n; > if types then pr "size_t "; > pr "%s" len > + | CBArrayAndLen (Extent64 n, len) -> > + if types then pr "nbd_extent *"; > + pr "%s, " n; > + if types then pr "size_t "; > + pr "%s" len > | CBArrayAndLen _ -> assert false > | CBBytesIn (n, len) -> > if types then pr "const void *"; > @@ -488,6 +493,13 @@ let > pr "extern int nbd_get_errno (void);\n"; > pr "#define LIBNBD_HAVE_NBD_GET_ERRNO 1\n"; > pr "\n"; > + pr "/* This is used in the callback for nbd_block_status_64.\n"; > + pr " */\n"; > + pr "typedef struct {\n"; > + pr " uint64_t length;\n"; > + pr " uint64_t flags;\n"; > + pr "} nbd_extent;\n"; > + pr "\n"; > print_closure_structs (); > List.iter ( > fun (name, { args; optargs; ret }) -> Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs