Staging
v0.5.1
https://github.com/python/cpython
Revision fbb9c0bf3c029caf02e531dac6df80b88f01b0a0 authored by Thomas Heller on 06 June 2008, 08:33:46 UTC, committed by Thomas Heller on 06 June 2008, 08:33:46 UTC
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.
1 parent d77554f
History
Tip revision: fbb9c0bf3c029caf02e531dac6df80b88f01b0a0 authored by Thomas Heller on 06 June 2008, 08:33:46 UTC
Issue #1798: Add ctypes calling convention that allows safe access of errno.
Tip revision: fbb9c0b
File Mode Size
Python-ast.h -rw-r--r-- 19.6 KB
Python.h -rw-r--r-- 4.3 KB
abstract.h -rw-r--r-- 42.5 KB
asdl.h -rw-r--r-- 1.1 KB
ast.h -rw-r--r-- 230 bytes
bitset.h -rw-r--r-- 792 bytes
boolobject.h -rw-r--r-- 912 bytes
bufferobject.h -rw-r--r-- 922 bytes
bytearrayobject.h -rw-r--r-- 1.8 KB
bytes_methods.h -rw-r--r-- 3.2 KB
bytesobject.h -rw-r--r-- 7.0 KB
cStringIO.h -rw-r--r-- 2.0 KB
cellobject.h -rw-r--r-- 651 bytes
ceval.h -rw-r--r-- 4.8 KB
classobject.h -rw-r--r-- 2.9 KB
cobject.h -rw-r--r-- 1.7 KB
code.h -rw-r--r-- 3.4 KB
codecs.h -rw-r--r-- 4.9 KB
compile.h -rw-r--r-- 1.1 KB
complexobject.h -rw-r--r-- 1.5 KB
datetime.h -rw-r--r-- 8.1 KB
descrobject.h -rw-r--r-- 2.1 KB
dictobject.h -rw-r--r-- 5.6 KB
enumobject.h -rw-r--r-- 253 bytes
errcode.h -rw-r--r-- 1.3 KB
eval.h -rw-r--r-- 557 bytes
fileobject.h -rw-r--r-- 2.6 KB
floatobject.h -rw-r--r-- 5.0 KB
frameobject.h -rw-r--r-- 2.9 KB
funcobject.h -rw-r--r-- 2.9 KB
genobject.h -rw-r--r-- 891 bytes
graminit.h -rw-r--r-- 1.9 KB
grammar.h -rw-r--r-- 2.0 KB
import.h -rw-r--r-- 2.0 KB
intobject.h -rw-r--r-- 2.7 KB
intrcheck.h -rw-r--r-- 274 bytes
iterobject.h -rw-r--r-- 522 bytes
listobject.h -rw-r--r-- 2.5 KB
longintrepr.h -rw-r--r-- 2.3 KB
longobject.h -rw-r--r-- 5.5 KB
marshal.h -rw-r--r-- 713 bytes
metagrammar.h -rw-r--r-- 253 bytes
methodobject.h -rw-r--r-- 3.2 KB
modsupport.h -rw-r--r-- 4.9 KB
moduleobject.h -rw-r--r-- 609 bytes
node.h -rw-r--r-- 890 bytes
object.h -rw-r--r-- 35.0 KB
objimpl.h -rw-r--r-- 12.1 KB
opcode.h -rw-r--r-- 4.2 KB
osdefs.h -rw-r--r-- 942 bytes
parsetok.h -rw-r--r-- 1.7 KB
patchlevel.h -rw-r--r-- 1.4 KB
pgen.h -rw-r--r-- 253 bytes
pgenheaders.h -rw-r--r-- 1.1 KB
py_curses.h -rw-r--r-- 4.1 KB
pyarena.h -rw-r--r-- 2.6 KB
pydebug.h -rw-r--r-- 1.2 KB
pyerrors.h -rw-r--r-- 11.1 KB
pyexpat.h -rw-r--r-- 1.9 KB
pyfpe.h -rw-r--r-- 8.3 KB
pygetopt.h -rw-r--r-- 306 bytes
pymacconfig.h -rw-r--r-- 1.5 KB
pymactoolbox.h -rw-r--r-- 7.8 KB
pymath.h -rw-r--r-- 5.5 KB
pymem.h -rw-r--r-- 3.7 KB
pyport.h -rw-r--r-- 21.7 KB
pystate.h -rw-r--r-- 6.1 KB
pystrcmp.h -rw-r--r-- 436 bytes
pystrtod.h -rw-r--r-- 359 bytes
pythonrun.h -rw-r--r-- 6.5 KB
pythread.h -rw-r--r-- 1.3 KB
rangeobject.h -rw-r--r-- 646 bytes
setobject.h -rw-r--r-- 2.9 KB
sliceobject.h -rw-r--r-- 1.3 KB
stringobject.h -rw-r--r-- 1.6 KB
structmember.h -rw-r--r-- 2.6 KB
structseq.h -rw-r--r-- 862 bytes
symtable.h -rw-r--r-- 3.8 KB
sysmodule.h -rw-r--r-- 863 bytes
timefuncs.h -rw-r--r-- 442 bytes
token.h -rw-r--r-- 1.7 KB
traceback.h -rw-r--r-- 691 bytes
tupleobject.h -rw-r--r-- 2.1 KB
ucnhash.h -rw-r--r-- 861 bytes
unicodeobject.h -rw-r--r-- 48.7 KB
warnings.h -rw-r--r-- 635 bytes
weakrefobject.h -rw-r--r-- 2.4 KB

back to top