44
44
void **func, const char *signature)
46
46
PyObject *d = NULL;
47
PyObject *c_obj = NULL;
48
const char *desc = NULL;
47
PyObject *capsule = NULL;
50
/* (char *) because Python2.4 defines this as (char *) rather than
53
d = PyObject_GetAttrString(module, (char *)_C_API_NAME);
50
d = PyObject_GetAttrString(module, _C_API_NAME);
55
52
// PyObject_GetAttrString sets an appropriate exception
58
c_obj = PyDict_GetItemString(d, funcname);
55
capsule = PyDict_GetItemString(d, funcname);
60
57
// PyDict_GetItemString does not set an exception
61
58
PyErr_Format(PyExc_AttributeError,
62
59
"Module %s did not export a function named %s\n",
63
60
PyModule_GetName(module), funcname);
66
desc = (char *)PyCObject_GetDesc(c_obj);
67
if (!desc || strcmp(desc, signature) != 0) {
71
PyErr_Format(PyExc_TypeError,
72
"C function %s.%s has wrong signature (expected %s, got %s)",
73
PyModule_GetName(module), funcname, signature, desc);
63
pointer = PyCapsule_GetPointer(capsule, signature);
65
// PyCapsule_GetPointer sets an error with a little context
76
*func = PyCObject_AsVoidPtr(c_obj);