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() |