mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
Use "O&" in calls to PyArg_Parse when we need a 'void*' instead of "k"
or "K" codes.
This commit is contained in:
parent
db2b1b3389
commit
410c3b58c9
2 changed files with 17 additions and 13 deletions
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue