python: Rearrange C files for bindings.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 22 Apr 2011 18:58:29 +0000 (19:58 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 22 Apr 2011 20:50:15 +0000 (21:50 +0100)
Move the hand-written functions into two new files:
guestfs-py.h and guestfs-py-byhand.c

This is just code motion.

generator/generator_python.ml
po/POTFILES.in
python/Makefile.am
python/guestfs-py-byhand.c [new file with mode: 0644]
python/guestfs-py.h [new file with mode: 0644]

index 8606db5..f3a2a94 100644 (file)
@@ -34,51 +34,11 @@ let rec generate_python_c () =
   generate_header CStyle LGPLv2plus;
 
   pr "\
-#define PY_SSIZE_T_CLEAN 1
-#include <Python.h>
-
-#if PY_VERSION_HEX < 0x02050000
-typedef int Py_ssize_t;
-#define PY_SSIZE_T_MAX INT_MAX
-#define PY_SSIZE_T_MIN INT_MIN
-#endif
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <assert.h>
 
-#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
-}
+#include \"guestfs-py.h\"
 
 /* This list should be freed (but not the strings) after use. */
 static char **
@@ -159,45 +119,6 @@ free_strings (char **argv)
   free (argv);
 }
 
-static PyObject *
-py_guestfs_create (PyObject *self, PyObject *args)
-{
-  guestfs_h *g;
-
-  g = guestfs_create ();
-  if (g == NULL) {
-    PyErr_SetString (PyExc_RuntimeError,
-                     \"guestfs.create: failed to allocate handle\");
-    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);
-}
-
-static PyObject *
-py_guestfs_close (PyObject *self, PyObject *args)
-{
-  PyThreadState *py_save = NULL;
-  PyObject *py_g;
-  guestfs_h *g;
-
-  if (!PyArg_ParseTuple (args, (char *) \"O:guestfs_close\", &py_g))
-    return NULL;
-  g = get_handle (py_g);
-
-  if (PyEval_ThreadsInitialized ())
-    py_save = PyEval_SaveThread ();
-  guestfs_close (g);
-  if (PyEval_ThreadsInitialized ())
-    PyEval_RestoreThread (py_save);
-
-  Py_INCREF (Py_None);
-  return Py_None;
-}
-
 ";
 
   let emit_put_list_function typ =
index 663490c..c023ab9 100644 (file)
@@ -122,6 +122,7 @@ perl/bindtests.pl
 perl/lib/Sys/Guestfs.pm
 perl/lib/Sys/Guestfs/Lib.pm
 php/extension/guestfs_php.c
+python/guestfs-py-byhand.c
 python/guestfs-py.c
 regressions/rhbz501893.c
 regressions/test-launch-race.pl
index 1fde976..76b92fd 100644 (file)
@@ -39,7 +39,7 @@ python_DATA = guestfs.py
 
 python_LTLIBRARIES = libguestfsmod.la
 
-libguestfsmod_la_SOURCES = guestfs-py.c
+libguestfsmod_la_SOURCES = guestfs-py.c guestfs-py.h guestfs-py-byhand.c
 libguestfsmod_la_CFLAGS = -Wall -I$(PYTHON_INCLUDEDIR) \
                          -I$(top_srcdir)/src -I$(top_builddir)/src
 libguestfsmod_la_LIBADD = $(top_builddir)/src/libguestfs.la
diff --git a/python/guestfs-py-byhand.c b/python/guestfs-py-byhand.c
new file mode 100644 (file)
index 0000000..f454a7e
--- /dev/null
@@ -0,0 +1,69 @@
+/* libguestfs python bindings
+ * Copyright (C) 2009-2011 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* This file contains a small number of functions that are written by
+ * hand.  The majority of the bindings are generated (see
+ * guestfs-py.c).
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "guestfs-py.h"
+
+PyObject *
+py_guestfs_create (PyObject *self, PyObject *args)
+{
+  guestfs_h *g;
+
+  g = guestfs_create ();
+  if (g == NULL) {
+    PyErr_SetString (PyExc_RuntimeError,
+                     "guestfs.create: failed to allocate handle");
+    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);
+}
+
+PyObject *
+py_guestfs_close (PyObject *self, PyObject *args)
+{
+  PyThreadState *py_save = NULL;
+  PyObject *py_g;
+  guestfs_h *g;
+
+  if (!PyArg_ParseTuple (args, (char *) "O:guestfs_close", &py_g))
+    return NULL;
+  g = get_handle (py_g);
+
+  if (PyEval_ThreadsInitialized ())
+    py_save = PyEval_SaveThread ();
+  guestfs_close (g);
+  if (PyEval_ThreadsInitialized ())
+    PyEval_RestoreThread (py_save);
+
+  Py_INCREF (Py_None);
+  return Py_None;
+}
diff --git a/python/guestfs-py.h b/python/guestfs-py.h
new file mode 100644 (file)
index 0000000..6b7e05f
--- /dev/null
@@ -0,0 +1,67 @@
+/* libguestfs python bindings
+ * Copyright (C) 2009-2011 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef guestfs_py_h
+#define guestfs_py_h
+
+#include "guestfs.h"
+
+#define PY_SSIZE_T_CLEAN 1
+#include <Python.h>
+
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;
+#define PY_SSIZE_T_MAX INT_MAX
+#define PY_SSIZE_T_MIN INT_MIN
+#endif
+
+#ifndef HAVE_PYCAPSULE_NEW
+typedef struct {
+  PyObject_HEAD
+  guestfs_h *g;
+} Pyguestfs_Object;
+#endif
+
+static inline 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 inline 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
+}
+
+extern PyObject *py_guestfs_create (PyObject *self, PyObject *args);
+extern PyObject *py_guestfs_close (PyObject *self, PyObject *args);
+
+#endif /* guestfs_py_h */