r51320 - in python/trunk: Lib/ctypes/test/test_as_parameter.py Lib/ctypes/test/test_functions.py Misc/NEWS Modules/_ctypes/callbacks.c
Author: thomas.heller Date: Wed Aug 16 17:10:12 2006 New Revision: 51320 Modified: python/trunk/Lib/ctypes/test/test_as_parameter.py python/trunk/Lib/ctypes/test/test_functions.py python/trunk/Misc/NEWS python/trunk/Modules/_ctypes/callbacks.c Log: Remove the special casing of Py_None when converting the return value of the Python part of a callback function to C. If it cannot be converted, call PyErr_WriteUnraisable with the exception we got. Before, arbitrary data has been passed to the calling C code in this case. (I'm not really sure the NEWS entry is understandable, but I cannot find better words) Modified: python/trunk/Lib/ctypes/test/test_as_parameter.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_as_parameter.py (original) +++ python/trunk/Lib/ctypes/test/test_as_parameter.py Wed Aug 16 17:10:12 2006 @@ -61,6 +61,7 @@ def callback(v): args.append(v) + return v CallBack = CFUNCTYPE(c_int, c_int) Modified: python/trunk/Lib/ctypes/test/test_functions.py ============================================================================== --- python/trunk/Lib/ctypes/test/test_functions.py (original) +++ python/trunk/Lib/ctypes/test/test_functions.py Wed Aug 16 17:10:12 2006 @@ -222,6 +222,7 @@ def callback(v): args.append(v) + return v CallBack = CFUNCTYPE(c_int, c_int) Modified: python/trunk/Misc/NEWS ============================================================================== --- python/trunk/Misc/NEWS (original) +++ python/trunk/Misc/NEWS Wed Aug 16 17:10:12 2006 @@ -64,6 +64,11 @@ Library ------- +- If a the Python part of a ctypes callback function returns None, + and this cannot be converted to the required C type, an exception is + printed with PyErr_WriteUnraisable. Before this change, the C + callback did return arbitrary values to the calling code. + - The __repr__ method of a NULL ctypes.py_object() no longer raises an exception. Modified: python/trunk/Modules/_ctypes/callbacks.c ============================================================================== --- python/trunk/Modules/_ctypes/callbacks.c (original) +++ python/trunk/Modules/_ctypes/callbacks.c Wed Aug 16 17:10:12 2006 @@ -205,7 +205,7 @@ result = PyObject_CallObject(callable, arglist); CHECK("'calling callback function'", result); - if ((restype != &ffi_type_void) && result && result != Py_None) { + if ((restype != &ffi_type_void) && result) { PyObject *keep; assert(setfunc); #ifdef WORDS_BIGENDIAN
participants (1)
-
thomas.heller