diff options
author | Thomas Heller <theller@ctypes.org> | 2008-06-04 18:59:03 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2008-06-04 18:59:03 (GMT) |
commit | e70c3378c039cae30cd9ae559c4bdeb923254c43 (patch) | |
tree | 5977a09a2cd5bbe4aa3ff6bb52b4b554c179097a /Misc | |
parent | a2b34b87a94871999c78f343773ccf0f8c545932 (diff) | |
download | cpython-e70c3378c039cae30cd9ae559c4bdeb923254c43.zip cpython-e70c3378c039cae30cd9ae559c4bdeb923254c43.tar.gz cpython-e70c3378c039cae30cd9ae559c4bdeb923254c43.tar.bz2 |
Issue #1798: Add ctypes calling convention that allows safe access to
errno (and LastError, on Windows).
ctypes maintains a module-global, but thread-local, variable that
contains an error number; called 'ctypes_errno' for this discussion.
This variable is a private copy of the systems 'errno' value; the copy
is swapped with the 'errno' variable on several occasions.
Foreign functions created with CDLL(..., use_errno=True), when called,
swap the values 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.
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).
Two new ctypes functions are provided to access the 'ctypes_errno'
value from Python:
- ctypes.set_errno(value) sets ctypes_errno to 'value', the previous
ctypes_errno value is returned.
- ctypes.get_errno() returns the current ctypes_errno value.
---
On Windows, the same scheme is implemented for the error value which
is managed by the GetLastError() and SetLastError() windows api calls.
The ctypes functions are 'ctypes.set_last_error(value)' and
'ctypes.get_last_error()', the CDLL and WinDLL optional parameter is
named 'use_last_error', defaults to False.
---
On Windows, TlsSetValue and TlsGetValue calls are used to provide
thread local storage for the variables; ctypes compiled with __GNUC__
uses __thread variables.
Diffstat (limited to 'Misc')
-rw-r--r-- | Misc/NEWS | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -72,6 +72,9 @@ Extension Modules Library ------- +- Issue #1798: Add ctypes calling convention that allows safe access + to errno. + - Patch #2125: Add GetInteger and GetString methods for msilib.Record objects. |