]> granicus.if.org Git - python/commitdiff
Merged revisions 55896 via svnmerge from
authorThomas Heller <theller@ctypes.org>
Fri, 15 Jun 2007 17:10:41 +0000 (17:10 +0000)
committerThomas Heller <theller@ctypes.org>
Fri, 15 Jun 2007 17:10:41 +0000 (17:10 +0000)
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.
........

Modules/_ctypes/callproc.c
Modules/_ctypes/ctypes.h

index 58aa9bb623031f80231bf83a5c75e8e982a403b3..20b55db5648483b7c30341d3894d39051ebe921b 100644 (file)
@@ -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;
 
index 5fb603075d3363606872c1088e79c8469d880b97..0af7851020832bcbfe3c5e440b331be6535a8195 100644 (file)
@@ -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);