[Libguestfs] [PATCH] Python: Use new PyCapsule API where supported.
Richard W.M. Jones
rjones at redhat.com
Tue Aug 17 09:54:33 UTC 2010
I have run the automated tests on two machines, with Python 2.6 and
2.7 respectively, and at least it didn't fail on either.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v
-------------- next part --------------
>From 834077946a4a7a44bf7f0e5d19aa1d54d39022a4 Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at redhat.com>
Date: Tue, 17 Aug 2010 10:31:39 +0100
Subject: [PATCH] Python: Use new PyCapsule API where supported.
See:
http://lists.fedoraproject.org/pipermail/devel/2010-August/141064.html
---
configure.ac | 5 +++++
src/generator.ml | 13 +++++++++++++
2 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/configure.ac b/configure.ac
index a14dfd9..1922773 100644
--- a/configure.ac
+++ b/configure.ac
@@ -551,6 +551,11 @@ if test "x$PYTHON" != "xno"; then
fi
AC_MSG_RESULT([not found])
done
+
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lpython$PYTHON_VERSION"
+ AC_CHECK_FUNCS([PyCapsule_New])
+ LIBS="$old_LIBS"
fi
AC_SUBST(PYTHON_PREFIX)
diff --git a/src/generator.ml b/src/generator.ml
index 52e7aba..a3333ed 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -9496,25 +9496,35 @@ typedef int Py_ssize_t;
#include \"guestfs.h\"
+#ifndef HAVE_PYCAPSULE_NEW
typedef struct {
PyObject_HEAD
guestfs_h *g;
} Pyguestfs_Object;
+#endif
static guestfs_h *
get_handle (PyObject *obj)
{
assert (obj);
assert (obj != Py_None);
+#ifndef HAVE_PYCAPSULE_NEW
return ((Pyguestfs_Object *) obj)->g;
+#else
+ return (guestfs_h*) PyCapsule_GetPointer(obj, \"guestfs_h\");
+#endif
}
static PyObject *
put_handle (guestfs_h *g)
{
assert (g);
+#ifndef HAVE_PYCAPSULE_NEW
return
PyCObject_FromVoidPtrAndDesc ((void *) g, (char *) \"guestfs_h\", NULL);
+#else
+ return PyCapsule_New ((void *) g, \"guestfs_h\", NULL);
+#endif
}
/* This list should be freed (but not the strings) after use. */
@@ -9608,6 +9618,9 @@ py_guestfs_create (PyObject *self, PyObject *args)
return NULL;
}
guestfs_set_error_handler (g, NULL, NULL);
+ /* This can return NULL, but in that case put_handle will have
+ * set the Python error string.
+ */
return put_handle (g);
}
--
1.7.1
More information about the Libguestfs
mailing list