summaryrefslogtreecommitdiffstats
path: root/Doc/c-api
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2008-06-06 08:33:46 (GMT)
committerThomas Heller <theller@ctypes.org>2008-06-06 08:33:46 (GMT)
commitfbb9c0bf3c029caf02e531dac6df80b88f01b0a0 (patch)
treeca253013237012275d57d1cb24801ceea633cbf8 /Doc/c-api
parentd77554fe8c788f8ef74581c18788cd92867e95c1 (diff)
downloadcpython-fbb9c0bf3c029caf02e531dac6df80b88f01b0a0.zip
cpython-fbb9c0bf3c029caf02e531dac6df80b88f01b0a0.tar.gz
cpython-fbb9c0bf3c029caf02e531dac6df80b88f01b0a0.tar.bz2
Issue #1798: Add ctypes calling convention that allows safe access of errno.
ctypes maintains thread-local storage that has space for two error numbers: private copies of the system 'errno' value and, on Windows, the system error code accessed by the GetLastError() and SetLastError() api functions. Foreign functions created with CDLL(..., use_errno=True), when called, swap the system 'errno' value with the private copy just before the actual function call, and swapped again immediately afterwards. The 'use_errno' parameter defaults to False, in this case 'ctypes_errno' is not touched. On Windows, foreign functions created with CDLL(..., use_last_error=True) or WinDLL(..., use_last_error=True) swap the system LastError value with the ctypes private copy. The values are also swapped immeditately before and after ctypes callback functions are called, if the callbacks are constructed using the new optional use_errno parameter set to True: CFUNCTYPE(..., use_errno=TRUE) or WINFUNCTYPE(..., use_errno=True). New ctypes functions are provided to access the ctypes private copies from Python: - ctypes.set_errno(value) and ctypes.set_last_error(value) store 'value' in the private copy and returns the previous value. - ctypes.get_errno() and ctypes.get_last_error() returns the current ctypes private copies value.
Diffstat (limited to 'Doc/c-api')
0 files changed, 0 insertions, 0 deletions