[Libguestfs] [libnbd PATCH] generator: Add #define witnesses for all API

Richard W.M. Jones rjones at redhat.com
Tue Jun 4 09:34:24 UTC 2019


On Mon, Jun 03, 2019 at 05:05:12PM -0500, Eric Blake wrote:
> Make it easier for C libraries to consume arbitrary versions of
> libnbd, by giving a probe for which functions the current version of
> the library exports.
> ---
> 
> I'm fuzzy enough on OCaml that I'll get review for this, although I
> like the resulting libnbd.h.

I don't see any problems, OCaml or otherwise, ACK.

Thanks,

Rich.

>  generator/generator | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/generator/generator b/generator/generator
> index db7c10f..7d0ea3f 100755
> --- a/generator/generator
> +++ b/generator/generator
> @@ -2712,6 +2712,12 @@ let print_extern name args ret =
>    print_call name args ret;
>    pr ";\n"
> 
> +let print_extern_and_define name args ret =
> +  let name_upper = String.uppercase_ascii name in
> +  print_extern name args ret;
> +  pr "#define LIBNBD_HAVE_NBD_%s 1\n" name_upper;
> +  pr "\n"
> +
>  let generate_include_libnbd_h () =
>    generate_header CStyle;
> 
> @@ -2729,14 +2735,23 @@ let generate_include_libnbd_h () =
>    List.iter (fun (n, i) -> pr "#define LIBNBD_%-30s %d\n" n i) constants;
>    pr "\n";
>    pr "extern struct nbd_handle *nbd_create (void);\n";
> +  pr "#define LIBNBD_HAVE_NBD_CREATE 1\n";
> +  pr "\n";
>    pr "extern void nbd_close (struct nbd_handle *h);\n";
> +  pr "#define LIBNBD_HAVE_NBD_CLOSE 1\n";
> +  pr "\n";
>    pr "extern const char *nbd_get_error (void);\n";
> +  pr "#define LIBNBD_HAVE_NBD_GET_ERROR 1\n";
> +  pr "\n";
>    pr "extern int nbd_get_errno (void);\n";
> +  pr "#define LIBNBD_HAVE_NBD_GET_ERRNO 1\n";
> +  pr "\n";
>    pr "extern int nbd_add_close_callback (struct nbd_handle *h,\n";
>    pr "                                   nbd_close_callback cb, void *data);\n";
> +  pr "#define LIBNBD_HAVE_NBD_ADD_CLOSE_CALLBACK 1\n";
>    pr "\n";
>    List.iter (
> -    fun (name, { args; ret }) -> print_extern name args ret
> +    fun (name, { args; ret }) -> print_extern_and_define name args ret
>    ) handle_calls;
>    pr "\n";
>    pr "#endif /* LIBNBD_H */\n"
> @@ -2933,6 +2948,13 @@ in detail.  If you want an overview of using the API, or to see
>  how to call the API from other programming languages, start
>  with libnbd(3).
> 
> +For the sake of conditional compilation across a range of libnbd
> +versions, where a client may take advantage of newer API when present
> +but gracefully continue to compile even when it is not, all functions
> +declared in B<E<lt>libnbd.hE<gt>> have a corresponding witness macro
> +with prefix C<LIBNBD_HAVE_>. For example, C<nbd_create> has a
> +counterpart macro C<LIBNBD_HAVE_NBD_CREATE> defined to C<1>.
> +
>  =head1 CREATE, GET AND CLOSE HANDLES
> 
>   struct nbd_handle *nbd;
> -- 
> 2.20.1
> 
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list