mirror of https://github.com/python/cpython
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. ........
This commit is contained in:
parent
d3d80f3cd1
commit
59fc24403d
|
@ -1029,6 +1029,15 @@ PyObject *_CallProc(PPROC pProc,
|
||||||
return retval;
|
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 MS_WIN32
|
||||||
|
|
||||||
#ifdef _UNICODE
|
#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)
|
static PyObject *free_library(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
void *hMod;
|
void *hMod;
|
||||||
if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":FreeLibrary", &hMod))
|
if (!PyArg_ParseTuple(args, "O&:FreeLibrary", &_parse_voidp, &hMod))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!FreeLibrary((HMODULE)hMod))
|
if (!FreeLibrary((HMODULE)hMod))
|
||||||
return PyErr_SetFromWindowsErr(GetLastError());
|
return PyErr_SetFromWindowsErr(GetLastError());
|
||||||
|
@ -1235,7 +1244,7 @@ static PyObject *py_dl_close(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
void *handle;
|
void *handle;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, PY_VOID_P_CODE ":dlclose", &handle))
|
if (!PyArg_ParseTuple(args, "O&:dlclose", &_parse_voidp, &handle))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (dlclose(handle)) {
|
if (dlclose(handle)) {
|
||||||
PyErr_SetString(PyExc_OSError,
|
PyErr_SetString(PyExc_OSError,
|
||||||
|
@ -1252,7 +1261,8 @@ static PyObject *py_dl_sym(PyObject *self, PyObject *args)
|
||||||
void *handle;
|
void *handle;
|
||||||
void *ptr;
|
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;
|
return NULL;
|
||||||
ptr = ctypes_dlsym(handle, name);
|
ptr = ctypes_dlsym(handle, name);
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
|
@ -1277,8 +1287,8 @@ call_function(PyObject *self, PyObject *args)
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args,
|
if (!PyArg_ParseTuple(args,
|
||||||
PY_VOID_P_CODE "O!",
|
"O&O!",
|
||||||
&func,
|
&_parse_voidp, &func,
|
||||||
&PyTuple_Type, &arguments))
|
&PyTuple_Type, &arguments))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -1308,8 +1318,8 @@ call_cdeclfunction(PyObject *self, PyObject *args)
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args,
|
if (!PyArg_ParseTuple(args,
|
||||||
PY_VOID_P_CODE "O!",
|
"O&O!",
|
||||||
&func,
|
&_parse_voidp, &func,
|
||||||
&PyTuple_Type, &arguments))
|
&PyTuple_Type, &arguments))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,6 @@ typedef int Py_ssize_t;
|
||||||
#define PY_LONG_LONG LONG_LONG
|
#define PY_LONG_LONG LONG_LONG
|
||||||
#endif
|
#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 tagPyCArgObject PyCArgObject;
|
||||||
typedef struct tagCDataObject CDataObject;
|
typedef struct tagCDataObject CDataObject;
|
||||||
typedef PyObject *(* GETFUNC)(void *, unsigned size);
|
typedef PyObject *(* GETFUNC)(void *, unsigned size);
|
||||||
|
|
Loading…
Reference in New Issue