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

Reply via email to