Staging
v0.8.1
https://github.com/python/cpython
Revision e70c3378c039cae30cd9ae559c4bdeb923254c43 authored by Thomas Heller on 04 June 2008, 18:59:03 UTC, committed by Thomas Heller on 04 June 2008, 18:59:03 UTC
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.
1 parent a2b34b8
History
Tip revision: e70c3378c039cae30cd9ae559c4bdeb923254c43 authored by Thomas Heller on 04 June 2008, 18:59:03 UTC
Issue #1798: Add ctypes calling convention that allows safe access to
Tip revision: e70c337
File Mode Size
Demo
Doc
Grammar
Include
Lib
Mac
Misc
Modules
Objects
PC
PCbuild
Parser
Python
RISCOS
Tools
.bzrignore -rw-r--r-- 635 bytes
.hgignore -rw-r--r-- 866 bytes
.hgtags -rw-r--r-- 3.4 KB
LICENSE -rw-r--r-- 13.4 KB
Makefile.pre.in -rw-r--r-- 37.4 KB
README -rw-r--r-- 55.8 KB
configure -rwxr-xr-x 646.6 KB
configure.in -rw-r--r-- 100.6 KB
install-sh -rwxr-xr-x 7.0 KB
pyconfig.h.in -rw-r--r-- 28.7 KB
setup.py -rw-r--r-- 75.3 KB

README

back to top