[Libguestfs] [PATCH v2] customize/perl_edit-c.c: Don't use internal APIs.

Pino Toscano ptoscano at redhat.com
Thu Apr 14 13:33:25 UTC 2016


On Tuesday 12 April 2016 08:41:37 Richard W.M. Jones wrote:
> We can now use the Guestfs.c_pointer method to access the underlying
> guestfs_h *.  So no need to use internal APIs for this.
> ---
>  customize/perl_edit-c.c | 18 ++++++------------
>  customize/perl_edit.ml  | 10 ++++++++--
>  2 files changed, 14 insertions(+), 14 deletions(-)
> 
> diff --git a/customize/perl_edit-c.c b/customize/perl_edit-c.c
> index 753d990..7191bef 100644
> --- a/customize/perl_edit-c.c
> +++ b/customize/perl_edit-c.c
> @@ -25,30 +25,24 @@
>  #include <caml/alloc.h>
>  #include <caml/memory.h>
>  #include <caml/mlvalues.h>
> +#include <caml/fail.h>
>  
>  #include "file-edit.h"
>  
> -/**
> - * We try to reuse the internals of the OCaml binding (for extracting
> - * the guestfs handle, and raising errors); hopefully this should be safe,
> - * as long as it's kept internal within the libguestfs sources.
> - */
> -#include "../ocaml/guestfs-c.h"
> -
>  #pragma GCC diagnostic ignored "-Wmissing-prototypes"
>  
>  value
> -virt_customize_edit_file_perl (value verbosev, value gv, value filev,
> -                               value exprv)
> +virt_customize_edit_file_perl (value verbosev, value gv, value gpv,
> +                               value filev, value exprv)
>  {
> -  CAMLparam4 (verbosev, gv, filev, exprv);
> +  CAMLparam5 (verbosev, gv, gpv, filev, exprv);
>    int r;
> -  guestfs_h *g = Guestfs_val (gv);
> +  guestfs_h *g = (guestfs_h *) Int64_val (gpv);

This causes warnings on 32bit platforms though:

perl_edit-c.c: In function 'virt_customize_edit_file_perl':
perl_edit-c.c:40:18: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
   guestfs_h *g = (guestfs_h *) Int64_val (gpv);
                  ^
What about the following patch?

Subject: [PATCH] customize: cast value to intptr_t for pointer usage

Cast a Int64 OCaml value to intptr_t before casting it to a pointer, so
this avoids warnings about casting an int to pointer.

Fixes commit 80a13b7216340b2bee437c39db2375b61804e133.
---
 customize/perl_edit-c.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/customize/perl_edit-c.c b/customize/perl_edit-c.c
index 7191bef..9558d07 100644
--- a/customize/perl_edit-c.c
+++ b/customize/perl_edit-c.c
@@ -37,7 +37,7 @@ virt_customize_edit_file_perl (value verbosev, value gv, value gpv,
 {
   CAMLparam5 (verbosev, gv, gpv, filev, exprv);
   int r;
-  guestfs_h *g = (guestfs_h *) Int64_val (gpv);
+  guestfs_h *g = (guestfs_h *) (intptr_t) Int64_val (gpv);

   r = edit_file_perl (g, String_val (filev), String_val (exprv), NULL,
                       Bool_val (verbosev));

Thanks,
-- 
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20160414/607eb9e1/attachment.sig>


More information about the Libguestfs mailing list