diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 481de85fde..486412deec 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3075,7 +3075,7 @@ int _ctypes_simple_instance(PyObject *obj) PyTypeObject *type = (PyTypeObject *)obj; if (PyCSimpleTypeObject_Check(type)) - return type->tp_base != &Simple_Type; + return type->tp_base == &Simple_Type; return 0; } @@ -3088,7 +3088,7 @@ PyCData_get(PyObject *type, GETFUNC getfunc, PyObject *src, return getfunc(adr, size); assert(type); dict = PyType_stgdict(type); - if (dict && dict->getfunc && !_ctypes_simple_instance(type)) + if (dict && dict->getfunc && _ctypes_simple_instance(type)) return dict->getfunc(adr, size); return PyCData_FromBaseObj(type, src, index, adr); } @@ -5003,7 +5003,7 @@ static PyGetSetDef Simple_getsets[] = { static PyObject * Simple_from_outparm(PyObject *self, PyObject *args) { - if (_ctypes_simple_instance((PyObject *)Py_TYPE(self))) { + if (!_ctypes_simple_instance((PyObject *)Py_TYPE(self))) { Py_INCREF(self); return self; } diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c index 591b944d76..75ef63b799 100644 --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -176,7 +176,7 @@ static void _CallPythonObject(void *mem, StgDictObject *dict; dict = PyType_stgdict(cnv); - if (dict && dict->getfunc && !_ctypes_simple_instance(cnv)) { + if (dict && dict->getfunc && _ctypes_simple_instance(cnv)) { PyObject *v = dict->getfunc(*pArgs, dict->size); if (!v) { PrintError("create argument %zd:\n", i); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 4a6b8ec3ee..af4706d6ea 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -977,7 +977,7 @@ static PyObject *GetResult(PyObject *restype, void *result, PyObject *checker) if (dict == NULL) return PyObject_CallFunction(restype, "i", *(int *)result); - if (dict->getfunc && !_ctypes_simple_instance(restype)) { + if (dict->getfunc && _ctypes_simple_instance(restype)) { retval = dict->getfunc(result, dict->size); /* If restype is py_object (detected by comparing getfunc with O_get), we have to call Py_DECREF because O_get has already