• Thomas Heller's avatar
    Merged revisions 63977 via svnmerge from · 9cac7b61
    Thomas Heller yazdı
    svn+ssh://pythondev@svn.python.org/python/trunk
    
    ........
      r63977 | thomas.heller | 2008-06-06 10:33:46 +0200 (Fri, 06 Jun 2008) | 31 lines
    
      Issue #1798: Add ctypes calling convention that allows safe access of errno.
    
      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.
    ........
    9cac7b61
callbacks.c 15.1 KB