cpython/Modules/_ctypes
Thomas Heller e70c3378c0 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.
2008-06-04 18:59:03 +00:00
..
darwin Copy ctypes-0.9.9.4 sources from external into the trunk. 2006-03-08 19:35:11 +00:00
libffi Fix misspelled sys.platform name and misspelled filename. 2008-06-02 18:41:30 +00:00
libffi_arm_wince Copy ctypes-0.9.9.4 sources from external into the trunk. 2006-03-08 19:35:11 +00:00
libffi_msvc On 64-bit Windows, ffi_arg must be 8 bytes long. This fixes the 2007-05-04 08:20:41 +00:00
libffi_osx Merged changes from libffi3-branch. 2008-03-04 20:09:11 +00:00
_ctypes.c Issue #1798: Add ctypes calling convention that allows safe access to 2008-06-04 18:59:03 +00:00
_ctypes_test.c Issue 1872: Changed the struct module typecode from 't' to '?', for 2008-03-05 15:34:29 +00:00
_ctypes_test.h Copy ctypes-0.9.9.4 sources from external into the trunk. 2006-03-08 19:35:11 +00:00
callbacks.c Issue #1798: Add ctypes calling convention that allows safe access to 2008-06-04 18:59:03 +00:00
callproc.c Issue #1798: Add ctypes calling convention that allows safe access to 2008-06-04 18:59:03 +00:00
cfield.c Renamed PyString to PyBytes 2008-05-26 12:51:38 +00:00
ctypes.h Issue #1798: Add ctypes calling convention that allows safe access to 2008-06-04 18:59:03 +00:00
ctypes_dlfcn.h Add pep-291 compatibility markers. 2006-06-12 20:56:48 +00:00
malloc_closure.c Patch #1722225: Support QNX 6. 2008-05-23 15:06:50 +00:00
stgdict.c Add pickle support to ctypes types. 2008-02-13 20:21:53 +00:00