summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2007-06-15 17:10:41 +0000
committerThomas Heller <theller@ctypes.org>2007-06-15 17:10:41 +0000
commit59fc24403d92b829a24ec2a815d39e881b53337f (patch)
tree4c21977665e45829b568b501e425d55fbf998b5f
parentd3d80f3cd171bf0f75bf8eb698de7e4a3c6f262b (diff)
downloadcpython-git-59fc24403d92b829a24ec2a815d39e881b53337f.tar.gz
Merged revisions 55896 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk/Modules/_ctypes ........ r55896 | thomas.heller | 2007-06-11 17:58:33 +0200 (Mo, 11 Jun 2007) | 3 lines Use "O&" in calls to PyArg_Parse when we need a 'void*' instead of "k" or "K" codes. ........
-rw-r--r--Modules/_ctypes/callproc.c24
-rw-r--r--Modules/_ctypes/ctypes.h6
2 files changed, 17 insertions, 13 deletions
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 58aa9bb623..20b55db564 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -1029,6 +1029,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
@@ -1112,7 +1121,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());
@@ -1235,7 +1244,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,
@@ -1252,7 +1261,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(handle, name);
if (!ptr) {
@@ -1277,8 +1287,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;
@@ -1308,8 +1318,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 5fb603075d..0af7851020 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -23,12 +23,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 *, unsigned size);