[libguestfs] Add upstream patch to fix Perl bindtests on 32 bit.

Richard W.M. Jones rjones at fedoraproject.org
Wed Aug 29 09:55:01 UTC 2012


commit eb4d3df8f6868e5070c1d9a52fd70922026249ab
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Wed Aug 29 10:53:54 2012 +0100

    Add upstream patch to fix Perl bindtests on 32 bit.

 ...sts-Fix-64-bit-integers-on-input-on-32-bi.patch |  106 ++++++++++++++++++++
 libguestfs.spec                                    |   10 ++-
 2 files changed, 115 insertions(+), 1 deletions(-)
---
diff --git a/0001-perl-bindtests-Fix-64-bit-integers-on-input-on-32-bi.patch b/0001-perl-bindtests-Fix-64-bit-integers-on-input-on-32-bi.patch
new file mode 100644
index 0000000..f813dfb
--- /dev/null
+++ b/0001-perl-bindtests-Fix-64-bit-integers-on-input-on-32-bi.patch
@@ -0,0 +1,106 @@
+From 1aca7053db3208d307ff2e43bd414d728a1edcc1 Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Wed, 29 Aug 2012 10:31:09 +0100
+Subject: [PATCH] perl: bindtests: Fix 64 bit integers on input on 32 bit Perl
+ interpreter.
+
+---
+ generator/generator_bindtests.ml |  4 ++--
+ generator/generator_perl.ml      | 27 +++++++++++++++++++++++++--
+ perl/typemap                     |  5 ++++-
+ 3 files changed, 31 insertions(+), 5 deletions(-)
+
+diff --git a/generator/generator_bindtests.ml b/generator/generator_bindtests.ml
+index 95577c0..54c46fa 100644
+--- a/generator/generator_bindtests.ml
++++ b/generator/generator_bindtests.ml
+@@ -370,7 +370,7 @@ my $g = Sys::Guestfs->new ();
+         | CallStringList xs ->
+             "[" ^ String.concat "," (List.map (sprintf "\"%s\"") xs) ^ "]"
+         | CallInt i -> string_of_int i
+-        | CallInt64 i -> Int64.to_string i
++        | CallInt64 i -> "\"" ^ Int64.to_string i ^ "\""
+         | CallBool b -> if b then "1" else "0"
+         | CallBuffer s -> "\"" ^ c_quote s ^ "\""
+       ) args
+@@ -379,7 +379,7 @@ my $g = Sys::Guestfs->new ();
+         function
+         | CallOBool (n, v)    -> "'" ^ n ^ "' => " ^ if v then "1" else "0"
+         | CallOInt (n, v)     -> "'" ^ n ^ "' => " ^ string_of_int v
+-        | CallOInt64 (n, v)   -> "'" ^ n ^ "' => " ^ Int64.to_string v
++        | CallOInt64 (n, v)   -> "'" ^ n ^ "' => \"" ^ Int64.to_string v ^ "\""
+         | CallOString (n, v)  -> "'" ^ n ^ "' => '" ^ v ^ "'"
+         | CallOStringList (n, xs) ->
+           "'" ^ n ^ "' => " ^
+diff --git a/generator/generator_perl.ml b/generator/generator_perl.ml
+index 3ed521f..07644e8 100644
+--- a/generator/generator_perl.ml
++++ b/generator/generator_perl.ml
+@@ -75,6 +75,28 @@ my_newSVull(unsigned long long val) {
+ #endif
+ }
+ 
++/* Convert a 64 bit int on input.  To cope with the case of having
++ * a 32 bit Perl interpreter, we allow the user to pass a string
++ * here which is scanned as a 64 bit integer.
++ */
++static int64_t
++my_SvIV64 (SV *sv)
++{
++#ifdef USE_64_BIT_ALL
++  return SvIV (sv);
++#else
++  if (SvTYPE (sv) == SVt_PV) {
++    const char *str = SvPV_nolen (sv);
++    int64_t r;
++
++    sscanf (str, \"%%\" SCNi64, &r);
++    return r;
++  }
++  else
++    return SvIV (sv);
++#endif
++}
++
+ /* http://www.perlmonks.org/?node_id=680842 */
+ static char **
+ XS_unpack_charPtrPtr (SV *arg) {
+@@ -419,9 +441,10 @@ user_cancel (g)
+             pr "if (strcmp (this_arg, \"%s\") == 0) {\n" n;
+             (match argt with
+              | OBool _
+-             | OInt _
+-             | OInt64 _ ->
++             | OInt _ ->
+                pr "          optargs_s.%s = SvIV (ST (items_i+1));\n" n;
++             | OInt64 _ ->
++               pr "          optargs_s.%s = my_SvIV64 (ST (items_i+1));\n" n;
+              | OString _ ->
+                pr "          optargs_s.%s = SvPV_nolen (ST (items_i+1));\n" n;
+              | OStringList _ ->
+diff --git a/perl/typemap b/perl/typemap
+index d978e60..43e7948 100644
+--- a/perl/typemap
++++ b/perl/typemap
+@@ -2,7 +2,7 @@ TYPEMAP
+ char *		T_PV
+ const char *	T_PV
+ guestfs_h *	O_OBJECT_guestfs_h
+-int64_t	  	T_IV
++int64_t	  	O_OBJECT_int64
+ 
+ INPUT
+ O_OBJECT_guestfs_h
+@@ -18,6 +18,9 @@ O_OBJECT_guestfs_h
+         croak (\"${Package}::$func_name(): $var is not a blessed HV reference\");
+     }
+ 
++O_OBJECT_int64
++    $var = my_SvIV64 ($arg);
++
+ OUTPUT
+ O_OBJECT_guestfs_h
+     sv_setiv ($arg, PTR2IV ($var));
+-- 
+1.7.11.5
+
diff --git a/libguestfs.spec b/libguestfs.spec
index b900da7..5748698 100644
--- a/libguestfs.spec
+++ b/libguestfs.spec
@@ -22,7 +22,7 @@ Summary:       Access and modify virtual machine disk images
 Name:          libguestfs
 Epoch:         1
 Version:       1.19.34
-Release:       1%{?dist}
+Release:       2%{?dist}
 License:       LGPLv2+
 Group:         Development/Libraries
 URL:           http://libguestfs.org/
@@ -33,6 +33,9 @@ Patch1:        ruby-1.9-vendor-not-site.patch
 BuildRequires: autoconf, automake, libtool, gettext-devel
 %endif
 
+# Upstream patch to fix Perl bindtests on 32 bit.
+Patch2:        0001-perl-bindtests-Fix-64-bit-integers-on-input-on-32-bi.patch
+
 # Non-upstream patch to remove udev from the packagelist.  systemd now
 # 'obsoletes' udev, but febootstrap doesn't get this relationship
 # right.  When udev disappears from the repository we can remove this
@@ -678,6 +681,8 @@ for %{name}.
 autoreconf -i
 %endif
 
+%patch2 -p1
+
 %patch4 -p1
 
 mkdir -p daemon/m4
@@ -991,6 +996,9 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/libguestfs
 
 
 %changelog
+* Wed Aug 29 2012 Richard W.M. Jones <rjones at redhat.com> - 1:1.19.34-2
+- Add upstream patch to fix Perl bindtests on 32 bit.
+
 * Tue Aug 28 2012 Richard W.M. Jones <rjones at redhat.com> - 1:1.19.34-1
 - New upstream version 1.19.34.
 


More information about the scm-commits mailing list