Commit e0e69628 authored by Guido van Rossum's avatar Guido van Rossum

Added PyCObject_Import.

parent 43d287ad
......@@ -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
......
......@@ -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;
}
......@@ -351,4 +351,5 @@ EXPORTS
_Py_c_diff
PyCObject_FromVoidPtr
PyCObject_AsVoidPtr
PyCObject_Import
Py_GetBuildInfo
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment