Author: andrewjlawrence
Branch: winoverlapped
Changeset: r96151:aadc1d859506
Date: 2019-02-24 21:19 +0000
http://bitbucket.org/pypy/pypy/changeset/aadc1d859506/
Log: Fixed first test case for windows events
diff --git a/lib_pypy/_overlapped.py b/lib_pypy/_overlapped.py
--- a/lib_pypy/_overlapped.py
+++ b/lib_pypy/_overlapped.py
@@ -62,21 +62,25 @@
self.type = OverlappedType.TYPE_NONE
self.overlapped[0].hEvent = \
_kernel32.CreateEventW(NULL, True, False, NULL)
- self.address = _ffi.addressof(self.overlapped)
+ self.address = _ffi.addressof(self.overlapped[0])
def __del__(self):
+ ###if (!HasOverlappedIoCompleted(&self->overlapped) &&
+ ### self->type != TYPE_NOT_STARTED)
+ ###
+ xxx
# do this somehow else
- xxx
- err = _kernel32.GetLastError()
- bytes = _ffi.new('DWORD[1]')
- o = overlapped[0]
- if overlapped[0].pending:
- if _kernel32.CancelIoEx(o.handle, o.overlapped) & \
- self.GetOverlappedResult(o.handle, o.overlapped,
_ffi.addressof(bytes), True):
- # The operation is no longer pending, nothing to do
- pass
- else:
- raise RuntimeError('deleting an overlapped struct with a
pending operation not supported')
+ #err = _kernel32.GetLastError()
+ #bytes = _ffi.new('DWORD[1]')
+ #o = self.overlapped[0]
+ #if self.overlapped[0].pending:
+ # if _kernel32.CancelIoEx(o.handle, o.overlapped) & \
+ # self.GetOverlappedResult(o.handle, o.overlapped,
_ffi.addressof(bytes), True):
+ # # The operation is no longer pending, nothing to do
+ # pass
+ # else:
+ # raise RuntimeError('deleting an overlapped struct with a
pending operation not supported')
+
@property
def event(self):
@@ -84,24 +88,34 @@
def GetOverlappedResult(self, wait):
transferred = _ffi.new('DWORD[1]', [0])
+
+
res = _kernel32.GetOverlappedResult(self.handle, self.overlapped,
transferred, wait != 0)
if res:
err = _winapi.ERROR_SUCCESS
else:
- err = GetLastError()
+ err = _kernel32.GetLastError()
if err in (_winapi.ERROR_SUCCESS, _winapi.ERROR_MORE_DATA,
_winapi.ERROR_OPERATION_ABORTED):
self.completed = 1
self.pending = 0
- elif res == _winapi.ERROR_IO_INCOMPLETE:
+ elif err == _winapi.ERROR_IO_INCOMPLETE:
pass
else:
self.pending = 0
raise _winapi._WinError()
- if self.completed and self.allocated_buffer:
- import pdb; pdb.set_trace()
- if transferred[0] != len(self.allocated_buffer[0]):
- raise _winapi._WinError()
- return transferred[0], err
+ if self.type == OverlappedType.TYPE_READ:
+ if self.completed and self.allocated_buffer:
+ if transferred[0] != len(self.allocated_buffer):
+ ### Do a resize
+ result = _ffi.new("CHAR[]", transferred[0])
+ _ffi.memmove(result, self.allocated_buffer, transferred[0])
+ return result
+ else:
+ return b''
+ else:
+ return b''
+ else:
+ return transferred[0]
def getbuffer(self):
xxx
@@ -124,29 +138,33 @@
self.type = OverlappedType.TYPE_READ
self.handle = handle
- self.allocated_buffer = _ffi.new("BYTE[]", max(1,size))
+ self.allocated_buffer = _ffi.new("CHAR[]", max(1,size))
return self.do_WSARecv(handle, self.allocated_buffer, size, flags)
def do_WSARecv(self, handle, allocatedbuffer, size, flags):
nread = _ffi.new("LPDWORD")
wsabuff = _ffi.new("WSABUF[1]")
buffercount = _ffi.new("DWORD[1]", [1])
+ pflags = _ffi.new("LPDWORD")
+ pflags[0] = flags
+
wsabuff[0].len = size
wsabuff[0].buf = allocatedbuffer
- result = _winsock2.WSARecv(handle, wsabuff, _int2dword(1), nread,
_ffi.cast("LPDWORD",flags), self.overlapped, _ffi.NULL)
- if result:
- self.error = _winapi.ERROR_SUCCESS
+
+ result = _winsock2.WSARecv(handle, wsabuff, _int2dword(1), nread,
pflags, self.overlapped, _ffi.NULL)
+ if result < 0:
+ self.error = _kernel32.GetLastError()
else:
- self.error = _kernel32.GetLastError()
+ self.error = _winapi.ERROR_SUCCESS
if self.error == _winapi.ERROR_BROKEN_PIPE:
mark_as_completed(self.overlapped)
- return SetFromWindowsErr(err)
+ raise _winapi._WinError()
elif self.error in [_winapi.ERROR_SUCCESS, _winapi.ERROR_MORE_DATA,
_winapi.ERROR_IO_PENDING] :
return None
else:
self.type = OverlappedType.TYPE_NOT_STARTED
- return SetFromWindowsErr(err)
+ raise _winapi._WinError()
def getresult(self, wait=False):
return self.GetOverlappedResult(wait)
@@ -167,6 +185,7 @@
ov = Overlapped(handle)
else:
ov = Overlapped(None)
+
success = _kernel32.ConnectNamedPipe(handle, ov.overlapped)
if overlapped:
# Overlapped ConnectNamedPipe never returns a success code
@@ -193,25 +212,33 @@
existingcompletionport,
completionkey,
numberofconcurrentthreads)
- if not result:
+ if result == _ffi.NULL:
raise _winapi._WinError()
return result
def GetQueuedCompletionStatus(completionport, milliseconds):
numberofbytes = _ffi.new('DWORD[1]', [0])
- completionkey = _ffi.new('ULONG *', 0)
+ completionkey = _ffi.new('ULONG **')
if completionport is None:
raise _winapi._WinError()
- overlapped = _ffi.new('OVERLAPPED*')
+ overlapped = _ffi.new("OVERLAPPED **")
result = _kernel32.GetQueuedCompletionStatus(completionport,
numberofbytes,
completionkey,
overlapped,
milliseconds)
- err = _kernel32.GetLastError()
- return (err, numberofbytes, completionkey, overlapped)
+ if result:
+ err = _winapi.ERROR_SUCCESS
+ else:
+ err = _kernel32.GetLastError()
+ if overlapped[0] == _ffi.NULL:
+ if err == _winapi.WAIT_TIMEOUT:
+ return None
+ return SetFromWindowsErr(err)
+
+ return (err, numberofbytes, completionkey[0], overlapped[0])
@_ffi.callback("void(void*, bool)")
def post_to_queue_callback(lpparameter, timerorwaitfired):
@@ -223,7 +250,6 @@
def RegisterWaitWithQueue(object, completionport, ovaddress, miliseconds):
data = _ffi.new('PostCallbackData[1]')
newwaitobject = _ffi.new("HANDLE[1]")
-
data[0].hCompletionPort = completionport
data[0].Overlapped = ovaddress[0]
success = _kernel32.RegisterWaitForSingleObject(newwaitobject,
diff --git a/lib_pypy/_pypy_winbase_build.py b/lib_pypy/_pypy_winbase_build.py
--- a/lib_pypy/_pypy_winbase_build.py
+++ b/lib_pypy/_pypy_winbase_build.py
@@ -139,7 +139,7 @@
BOOL WINAPI RegisterWaitForSingleObject(PHANDLE, HANDLE, WAITORTIMERCALLBACK,
PVOID, ULONG, ULONG);
BOOL WINAPI PostQueuedCompletionStatus(HANDLE, DWORD, ULONG_PTR,
LPOVERLAPPED);
-BOOL WINAPI GetQueuedCompletionStatus(HANDLE, LPDWORD, PULONG_PTR,
LPOVERLAPPED, DWORD);
+BOOL WINAPI GetQueuedCompletionStatus(HANDLE, LPDWORD, ULONG**, LPOVERLAPPED*,
DWORD);
HANDLE WINAPI CreateIoCompletionPort(HANDLE, HANDLE, ULONG_PTR, DWORD);
#define WT_EXECUTEINWAITTHREAD 0x00000004
diff --git a/lib_pypy/_pypy_winbase_cffi.py b/lib_pypy/_pypy_winbase_cffi.py
--- a/lib_pypy/_pypy_winbase_cffi.py
+++ b/lib_pypy/_pypy_winbase_cffi.py
@@ -3,7 +3,7 @@
ffi = _cffi_backend.FFI('_pypy_winbase_cffi',
_version = 0x2601,
- _types =
b'\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x09\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x19\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\xE6\x03\x00\x00\x13\x11\x00\x00\xEC\x03\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x13\x11\x00\x00\x13\x11\x00\x00\xE4\x03\x00\x00\xE0\x03\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x03\x00\x00\x1F\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x1F\x11\x00\x00\x15\x11\x00\x00\xDB\x03\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\xDF\x03\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x31\x11\x00\x00\x18\x03\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x31\x11\x00\x00\x0A\x01\x00\x
00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\xE5\x03\x00\x00\x0A\x01\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x31\x11\x00\x00\xD3\x03\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x36\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x31\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x31\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x1F\x11\x00\x00\x0A\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x8F\x03\x00\x00\x6D\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x6D\x11\x00\x00\x6D\x11\x00\x00\x1B\x11\x00\x00\x1C\x11\x00\x00\x02\x0F\x00\x00\x0D\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x4
A\x0D\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x15\x11\x00\x00\x6D\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x02\x0F\x00\x00\x8A\x0D\x00\x00\x06\x01\x00\x00\x00\x0F\x00\x00\x8A\x0D\x00\x00\x00\x0F\x00\x00\x8A\x0D\x00\x00\x10\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\xE3\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xE6\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x92\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x8F\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x95\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x95\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x15\x11
\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x6D\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x9B\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xEC\x0D\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x00\x0F\x00\x00\xEC\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xEC\x0D\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x04\x09\x00\x00\x02\x09\x00\x00\xE2\x03\x00\x00\x05\x09\x00\x00\x06\x09\x00\x00\x03\x09\x00\x00\x07\x09\x00\x00\x02\x01\x00\x00\x39\x03\x00\x00\x01\x09\x00\x00\x00\x09\x00\x00\xEB\x03\x00\x00\x04\x01\x00\x00\x00\x01',
+ _types =
b'\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x09\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x19\x01\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\x00\x0F\x00\x00\x01\x0D\x00\x00\xE6\x03\x00\x00\x13\x11\x00\x00\xEC\x03\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x13\x11\x00\x00\x13\x11\x00\x00\xE4\x03\x00\x00\xE0\x03\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x03\x00\x00\x1F\x11\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x1F\x11\x00\x00\x15\x11\x00\x00\xDB\x03\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\xDF\x03\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x31\x11\x00\x00\x18\x03\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x31\x11\x00\x00\x0A\x01\x00\x
00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\xE5\x03\x00\x00\x0A\x01\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x31\x11\x00\x00\xD3\x03\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x36\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x36\x11\x00\x00\x36\x03\x00\x00\x31\x03\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x36\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x31\x11\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x1F\x11\x00\x00\x0A\x01\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x01\x0D\x00\x00\x8F\x03\x00\x00\x6D\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x6D\x11\x00\x00\x6D\x11\x00\x00\x1B\x11\x00\x00\x1C\x11\x00\x00\x02\x0F\x00\x00\x0D\x0D\x00\x00\x07\x01\x00\x00\x00\x0F\x00\x00\x4
A\x0D\x00\x00\x08\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x15\x11\x00\x00\x6D\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x02\x0F\x00\x00\x8A\x0D\x00\x00\x06\x01\x00\x00\x00\x0F\x00\x00\x8A\x0D\x00\x00\x00\x0F\x00\x00\x8A\x0D\x00\x00\x10\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\xE3\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xE6\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x92\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x8F\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x95\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x95\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x15\x11
\x00\x00\x15\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x6D\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x9B\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x92\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xEC\x0D\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x00\x0F\x00\x00\xEC\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xEC\x0D\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x04\x09\x00\x00\x02\x09\x00\x00\xE2\x03\x00\x00\x05\x09\x00\x00\x06\x09\x00\x00\x03\x09\x00\x00\x07\x09\x00\x00\x02\x01\x00\x00\x39\x03\x00\x00\x01\x09\x00\x00\x00\x09\x00\x00\xEB\x03\x00\x00\x04\x01\x00\x00\x00\x01',
_globals =
(b'\x00\x00\x2C\x23CancelIo',0,b'\x00\x00\x2F\x23CancelIoEx',0,b'\x00\x00\x2C\x23CloseHandle',0,b'\x00\x00\x2F\x23ConnectNamedPipe',0,b'\x00\x00\x91\x23CreateEventA',0,b'\x00\x00\x97\x23CreateEventW',0,b'\x00\x00\x9D\x23CreateFileA',0,b'\x00\x00\xCA\x23CreateFileW',0,b'\x00\x00\xB8\x23CreateIoCompletionPort',0,b'\x00\x00\xA6\x23CreateNamedPipeA',0,b'\x00\x00\xC0\x23CreateNamedPipeW',0,b'\x00\x00\x1E\x23CreatePipe',0,b'\x00\x00\x12\x23CreateProcessA',0,b'\x00\x00\x6C\x23CreateProcessW',0,b'\x00\x00\x63\x23DuplicateHandle',0,b'\x00\x00\xBE\x23GetCurrentProcess',0,b'\x00\x00\x4C\x23GetExitCodeProcess',0,b'\x00\x00\x87\x23GetLastError',0,b'\x00\x00\x82\x23GetModuleFileNameW',0,b'\x00\x00\x33\x23GetOverlappedResult',0,b'\x00\x00\x50\x23GetQueuedCompletionStatus',0,b'\x00\x00\xB5\x23GetStdHandle',0,b'\x00\x00\x87\x23GetVersion',0,b'\x00\x00\x5D\x23PostQueuedCompletionStatus',0,b'\x00\x00\x24\x23RegisterWaitForSingleObject',0,b'\xFF\xFF\xFF\x1FSEM_FAILCRITICALERRORS',1,b'\xF
F\xFF\xFF\x1FSEM_NOALIGNMENTFAULTEXCEPT',4,b'\xFF\xFF\xFF\x1FSEM_NOGPFAULTERRORBOX',2,b'\xFF\xFF\xFF\x1FSEM_NOOPENFILEERRORBOX',32768,b'\x00\x00\x7B\x23SetErrorMode',0,b'\x00\x00\xD8\x23SetEvent',0,b'\x00\x00\x57\x23SetNamedPipeHandleState',0,b'\x00\x00\x48\x23TerminateProcess',0,b'\x00\x00\x3F\x23WSARecv',0,b'\xFF\xFF\xFF\x1FWT_EXECUTEINWAITTHREAD',4,b'\xFF\xFF\xFF\x1FWT_EXECUTEONLYONCE',8,b'\x00\x00\x7E\x23WaitForSingleObject',0,b'\x00\x00\x78\x23_get_osfhandle',0,b'\x00\x00\x10\x23_getch',0,b'\x00\x00\x10\x23_getche',0,b'\x00\x00\x8C\x23_getwch',0,b'\x00\x00\x8C\x23_getwche',0,b'\x00\x00\x10\x23_kbhit',0,b'\x00\x00\x07\x23_locking',0,b'\x00\x00\x0C\x23_open_osfhandle',0,b'\x00\x00\x00\x23_putch',0,b'\x00\x00\x8E\x23_putwch',0,b'\x00\x00\x03\x23_setmode',0,b'\x00\x00\x00\x23_ungetch',0,b'\x00\x00\x89\x23_ungetwch',0,b'\x00\x00\xB0\x23socket',0),
_struct_unions =
((b'\x00\x00\x00\xE9\x00\x00\x00\x03$1',b'\x00\x00\xE8\x11DUMMYSTRUCTNAME',b'\x00\x00\x15\x11Pointer'),(b'\x00\x00\x00\xE8\x00\x00\x00\x02$2',b'\x00\x00\x18\x11Offset',b'\x00\x00\x18\x11OffsetHigh'),(b'\x00\x00\x00\xE0\x00\x00\x00\x02$PROCESS_INFORMATION',b'\x00\x00\x15\x11hProcess',b'\x00\x00\x15\x11hThread',b'\x00\x00\x18\x11dwProcessId',b'\x00\x00\x18\x11dwThreadId'),(b'\x00\x00\x00\xE4\x00\x00\x00\x02$STARTUPINFO',b'\x00\x00\x18\x11cb',b'\x00\x00\x13\x11lpReserved',b'\x00\x00\x13\x11lpDesktop',b'\x00\x00\x13\x11lpTitle',b'\x00\x00\x18\x11dwX',b'\x00\x00\x18\x11dwY',b'\x00\x00\x18\x11dwXSize',b'\x00\x00\x18\x11dwYSize',b'\x00\x00\x18\x11dwXCountChars',b'\x00\x00\x18\x11dwYCountChars',b'\x00\x00\x18\x11dwFillAttribute',b'\x00\x00\x18\x11dwFlags',b'\x00\x00\x8A\x11wShowWindow',b'\x00\x00\x8A\x11cbReserved2',b'\x00\x00\xEA\x11lpReserved2',b'\x00\x00\x15\x11hStdInput',b'\x00\x00\x15\x11hStdOutput',b'\x00\x00\x15\x11hStdError'),(b'\x00\x00\x00\xDF\x00\x00\x00\x02_
OVERLAPPED',b'\x00\x00\x18\x11Internal',b'\x00\x00\x18\x11InternalHigh',b'\x00\x00\xE9\x11DUMMYUNIONNAME',b'\x00\x00\x15\x11hEvent'),(b'\x00\x00\x00\xE2\x00\x00\x00\x02_PostCallbackData',b'\x00\x00\x15\x11hCompletionPort',b'\x00\x00\x31\x11Overlapped'),(b'\x00\x00\x00\xE3\x00\x00\x00\x02_SECURITY_ATTRIBUTES',b'\x00\x00\x18\x11nLength',b'\x00\x00\x15\x11lpSecurityDescriptor',b'\x00\x00\x01\x11bInheritHandle'),(b'\x00\x00\x00\xE5\x00\x00\x00\x02_WSABUF',b'\x00\x00\x18\x11len',b'\x00\x00\x13\x11buf')),
_typenames =
(b'\x00\x00\x00\xE7LPFN_DISCONNECTEX',b'\x00\x00\x00\x31LPOVERLAPPED',b'\x00\x00\x00\x46LPOVERLAPPED_COMPLETION_ROUTINE',b'\x00\x00\x00\x1CLPPROCESS_INFORMATION',b'\x00\x00\x00\xE1LPPostCallbackData',b'\x00\x00\x00\x92LPSECURITY_ATTRIBUTES',b'\x00\x00\x00\x1BLPSTARTUPINFO',b'\x00\x00\x00\x41LPWSABUF',b'\x00\x00\x00\xDFOVERLAPPED',b'\x00\x00\x00\xE0PROCESS_INFORMATION',b'\x00\x00\x00\x92PSECURITY_ATTRIBUTES',b'\x00\x00\x00\xE2PostCallbackData',b'\x00\x00\x00\xE3SECURITY_ATTRIBUTES',b'\x00\x00\x00\x15SOCKET',b'\x00\x00\x00\xE4STARTUPINFO',b'\x00\x00\x00\x27WAITORTIMERCALLBACK',b'\x00\x00\x00\xE5WSABUF',b'\x00\x00\x00\x8Awint_t'),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit