]> granicus.if.org Git - python/commitdiff
Added PyCObject_Import.
authorGuido van Rossum <guido@python.org>
Wed, 22 Jan 1997 20:48:48 +0000 (20:48 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 22 Jan 1997 20:48:48 +0000 (20:48 +0000)
Include/cobject.h
Objects/cobject.c
PC/python_nt.def

index db2ce23ae95a821d8ce1353a5a131925a95fbbe9..672e029e49de447d8fe5cc3874d03a8a7ed0d80f 100644 (file)
@@ -62,6 +62,10 @@ PyCObject_FromVoidPtr Py_PROTO((void *cobj, void (*destruct)(void*)));
 extern void *
 PyCObject_AsVoidPtr Py_PROTO((PyObject *));
 
+/* Import a pointer to a C object from a module using a PyCObject. */
+extern void *
+PyCObject_Import Py_PROTO((char *module_name, char *cobject_name));
+
 #ifdef __cplusplus
 }
 #endif
index 4016b91c4f27395aa7220e6369727e40d0e57c33..49b7bc98258a880801db47c3be39327c08a3d553 100644 (file)
@@ -57,6 +57,44 @@ PyCObject_FromVoidPtr(cobj, destr)
        return (PyObject *)self;
 }
 
+void *
+PyCObject_AsVoidPtr(self)
+       PyObject *self;
+{
+        if(self)
+         {
+           if(self->ob_type == &PyCObject_Type)
+             return ((PyCObject *)self)->cobject;
+           PyErr_SetString(PyExc_TypeError,
+                           "PyCObject_AsVoidPtr with non-C-object");
+         }
+       if(! PyErr_Occurred())
+           PyErr_SetString(PyExc_TypeError,
+                           "PyCObject_AsVoidPtr called with null pointer");
+       return NULL;
+}
+
+void *
+PyCObject_Import(module_name, name)
+     char *module_name;
+     char *name;
+{
+  PyObject *m, *c;
+  void *r=NULL;
+  
+  if(m=PyImport_ImportModule(module_name))
+    {
+      if(c=PyObject_GetAttrString(m,name))
+       {
+         r=PyCObject_AsVoidPtr(c);
+         Py_DECREF(c);
+       }
+      Py_DECREF(m);
+    }
+
+  return r;
+}
+
 static void
 PyCObject_dealloc(self)
        PyCObject *self;
@@ -65,6 +103,7 @@ PyCObject_dealloc(self)
        PyMem_DEL(self);
 }
 
+
 static char PyCObject_Type__doc__[] = 
 "C objects to be exported from one extension module to another\n\
 \n\
@@ -98,21 +137,3 @@ PyTypeObject PyCObject_Type = {
        0L,0L,0L,0L,
        PyCObject_Type__doc__ /* Documentation string */
 };
-
-void *
-PyCObject_AsVoidPtr(self)
-       PyObject *self;
-{
-        if(self)
-         {
-           if(self->ob_type == &PyCObject_Type)
-             return ((PyCObject *)self)->cobject;
-           PyErr_SetString(PyExc_TypeError,
-                           "PyCObject_AsVoidPtr with non-C-object");
-         }
-       if(! PyErr_Occurred())
-           PyErr_SetString(
-               PyExc_TypeError,
-              "PyCObject_AsVoidPtr called with null pointer");
-       return NULL;
-}
index ee282b1a7cab7a35cb76d18f2e9c88c0f4193cc9..b05696ee992ad921a1acef2776c63dea1a731cd6 100644 (file)
@@ -351,4 +351,5 @@ EXPORTS
        _Py_c_diff
        PyCObject_FromVoidPtr
        PyCObject_AsVoidPtr
+       PyCObject_Import
        Py_GetBuildInfo