diff options
author | Thomas Heller <theller@ctypes.org> | 2007-06-11 15:58:33 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2007-06-11 15:58:33 (GMT) |
commit | 410c3b58c925698538452351b25d15d1b816a254 (patch) | |
tree | 427fdca2a12f9648d3c3f5c1f4d0d468fab73c69 /Modules | |
parent | db2b1b33899b6aeb12b9d9721772ae23afe822ef (diff) | |
download | cpython-410c3b58c925698538452351b25d15d1b816a254.zip cpython-410c3b58c925698538452351b25d15d1b816a254.tar.gz cpython-410c3b58c925698538452351b25d15d1b816a254.tar.bz2 |
Use "O&" in calls to PyArg_Parse when we need a 'void*' instead of "k"
or "K" codes.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_ctypes/callproc.c | 24 | ||||
-rw-r--r-- | Modules/_ctypes/ctypes.h | 6 |
2 files changed, 17 insertions, 13 deletions
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 91141e8..7f95b9e 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -1046,6 +1046,15 @@ PyObject *_CallProc(PPROC pProc, return retval; } +static int +_parse_voidp(PyObject *obj, void **address) +{ + *address = PyLong_AsVoidPtr(obj); + if (*address == NULL) + return 0; + return 1; +} + #ifdef MS_WIN32 #ifdef _UNICODE @@ -1133,7 +1142,7 @@ Free the handle of an executable previously loaded by LoadLibrary.\n"; static PyObject *free_library(PyObject *self, PyObject *args) { void *hMod; - if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":FreeLibrary", &hMod)) + if (!PyArg_ParseTuple(args, "O&:FreeLibrary", &_parse_voidp, &hMod)) return NULL; if (!FreeLibrary((HMODULE)hMod)) return PyErr_SetFromWindowsErr(GetLastError()); @@ -1256,7 +1265,7 @@ static PyObject *py_dl_close(PyObject *self, PyObject *args) { void *handle; - if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":dlclose", &handle)) + if (!PyArg_ParseTuple(args, "O&:dlclose", &_parse_voidp, &handle)) return NULL; if (dlclose(handle)) { PyErr_SetString(PyExc_OSError, @@ -1273,7 +1282,8 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args) void *handle; void *ptr; - if (!PyArg_ParseTuple(args, PY_VOID_P_CODE "s:dlsym", &handle, &name)) + if (!PyArg_ParseTuple(args, "O&s:dlsym", + &_parse_voidp, &handle, &name)) return NULL; ptr = ctypes_dlsym((void*)handle, name); if (!ptr) { @@ -1298,8 +1308,8 @@ call_function(PyObject *self, PyObject *args) PyObject *result; if (!PyArg_ParseTuple(args, - PY_VOID_P_CODE "O!", - &func, + "O&O!", + &_parse_voidp, &func, &PyTuple_Type, &arguments)) return NULL; @@ -1329,8 +1339,8 @@ call_cdeclfunction(PyObject *self, PyObject *args) PyObject *result; if (!PyArg_ParseTuple(args, - PY_VOID_P_CODE "O!", - &func, + "O&O!", + &_parse_voidp, &func, &PyTuple_Type, &arguments)) return NULL; diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h index f1c174a..5846e3f 100644 --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -24,12 +24,6 @@ typedef int Py_ssize_t; #define PY_LONG_LONG LONG_LONG #endif -#if SIZEOF_VOID_P == SIZEOF_LONG -#define PY_VOID_P_CODE "k" -#elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P == SIZEOF_LONG_LONG) -#define PY_VOID_P_CODE "K" -#endif - typedef struct tagPyCArgObject PyCArgObject; typedef struct tagCDataObject CDataObject; typedef PyObject *(* GETFUNC)(void *, Py_ssize_t size); |