summaryrefslogtreecommitdiffstats
path: root/Misc
diff options
context:
space:
mode:
authorThomas Heller <theller@ctypes.org>2008-06-04 18:59:03 (GMT)
committerThomas Heller <theller@ctypes.org>2008-06-04 18:59:03 (GMT)
commite70c3378c039cae30cd9ae559c4bdeb923254c43 (patch)
tree5977a09a2cd5bbe4aa3ff6bb52b4b554c179097a /Misc
parenta2b34b87a94871999c78f343773ccf0f8c545932 (diff)
downloadcpython-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/NEWS3
1 files changed, 3 insertions, 0 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index bec0980..830f668 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.