text: import unittest, os, errno
  from ctypes import *
  from ctypes.util import find_library
  import threading
  
  class Test(unittest.TestCase):
      def test_open(self):
          libc_name = find_library("c")
          if libc_name is not None:
              libc = CDLL(libc_name, use_errno=True)
              if os.name == "nt":
                  libc_open = libc._open
              else:
                  libc_open = libc.open
  
              libc_open.argtypes = c_char_p, c_int
  
              self.failUnlessEqual(libc_open("", 0), -1)
              self.failUnlessEqual(get_errno(), errno.ENOENT)
  
              self.failUnlessEqual(set_errno(32), errno.ENOENT)
              self.failUnlessEqual(get_errno(), 32)
  
  
              def _worker():
                  set_errno(0)
  
                  libc = CDLL(libc_name, use_errno=False)
                  if os.name == "nt":
                      libc_open = libc._open
                  else:
                      libc_open = libc.open
                  libc_open.argtypes = c_char_p, c_int
                  self.failUnlessEqual(libc_open("", 0), -1)
                  self.failUnlessEqual(get_errno(), 0)
  
              t = threading.Thread(target=_worker)
              t.start()
              t.join()
  
              self.failUnlessEqual(get_errno(), 32)
              set_errno(0)
  
      if os.name == "nt":
  
          def test_GetLastError(self):
              dll = WinDLL("kernel32", use_last_error=True)
              GetModuleHandle = dll.GetModuleHandleA
              GetModuleHandle.argtypes = [c_wchar_p]
  
              self.failUnlessEqual(0, GetModuleHandle("foo"))
              self.failUnlessEqual(get_last_error(), 126)
  
              self.failUnlessEqual(set_last_error(32), 126)
              self.failUnlessEqual(get_last_error(), 32)
  
              def _worker():
                  set_last_error(0)
  
                  dll = WinDLL("kernel32", use_last_error=False)
                  GetModuleHandle = dll.GetModuleHandleW
                  GetModuleHandle.argtypes = [c_wchar_p]
                  GetModuleHandle("bar")
  
                  self.failUnlessEqual(get_last_error(), 0)
  
              t = threading.Thread(target=_worker)
              t.start()
              t.join()
  
              self.failUnlessEqual(get_last_error(), 32)
  
              set_last_error(0)
  
  if __name__ == "__main__":
      unittest.main()
  