Author: andrewjlawrence Branch: winoverlapped Changeset: r95909:846255c51472 Date: 2019-02-08 14:31 +0000 http://bitbucket.org/pypy/pypy/changeset/846255c51472/
Log: Work in progress. Added GetQueueCompletionStatus. diff --git a/lib_pypy/_overlapped.py b/lib_pypy/_overlapped.py --- a/lib_pypy/_overlapped.py +++ b/lib_pypy/_overlapped.py @@ -131,8 +131,20 @@ return None -def GetQueuedCompletionStatus(handle, milliseconds): - return None +def GetQueuedCompletionStatus(completionport, milliseconds): + numberofbytes = _ffi.new('DWORD[1]', [0]) + completionkey = _ffi.new('ULONG *', 0) + + if completionport is None: + raise _winapi._WinError() + overlapped = _ffi.new('OVERLAPPED*') + result = _kernel32.GetQueuedCompletionStatus(_Z(completionport), + numberofbytes, + completionkey, + overlapped, + milliseconds) + err = _kernel32.GetLastError() + return (err, numberofbytes, completionkey, overlapped) @_ffi.callback("void(void*, bool)") 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 @@ -140,6 +140,8 @@ 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); + #define WT_EXECUTEINWAITTHREAD 0x00000004 #define WT_EXECUTEONLYONCE 0x00000008 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,8 +3,8 @@ 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\xBF\x03\x00\x00\x13\x11\x00\x00\xC4\x03\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x13\x11\x00\x00\x13\x11\x00\x00\xBE\x03\x00\x00\xBA\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\xB5\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\xB9\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\x08\x01\x00\x00\x02\x0F\x00\x 00\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\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\x79\x03\x00\x00\x57\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x57\x11\x00\x00\x57\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\x3B\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\x57\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x02\x0F\x00\x00\x74\x0D\x00\x00\x06\x01\x00\x00\x00\x0F\x00\x00\x74\x0D\x00\x00\x00\x0F\x00\x00\x74\x0D\x00\x00\x10\x01\x00\x00\x00\x0F\x00\x00\x1 5\x0D\x00\x00\xBD\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xBF\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x7C\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x79\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x7F\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x7C\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x7F\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\x7C\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x57\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\x7C\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x85\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x7C\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xC4\x0D\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xC4\x0D\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x04\x09 \x00\x00\x02\x09\x00\x00\xBC\x03\x00\x00\x05\x09\x00\x00\x06\x09\x00\x00\x03\x09\x00\x00\x02\x01\x00\x00\x01\x09\x00\x00\x00\x09\x00\x00\xC3\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\x7B\x23CreateEventA',0,b'\x00\x00\x81\x23CreateEventW',0,b'\x00\x00\x87\x23CreateFileA',0,b'\x00\x00\xA9\x23CreateFileW',0,b'\x00\x00\x90\x23CreateNamedPipeA',0,b'\x00\x00\x9F\x23CreateNamedPipeW',0,b'\x00\x00\x1E\x23CreatePipe',0,b'\x00\x00\x12\x23CreateProcessA',0,b'\x00\x00\x56\x23CreateProcessW',0,b'\x00\x00\x4D\x23DuplicateHandle',0,b'\x00\x00\x9D\x23GetCurrentProcess',0,b'\x00\x00\x3D\x23GetExitCodeProcess',0,b'\x00\x00\x71\x23GetLastError',0,b'\x00\x00\x6C\x23GetModuleFileNameW',0,b'\x00\x00\x33\x23GetOverlappedResult',0,b'\x00\x00\x9A\x23GetStdHandle',0,b'\x00\x00\x71\x23GetVersion',0,b'\x00\x00\x47\x23PostQueuedCompletionStatus',0,b'\x00\x00\x24\x23RegisterWaitForSingleObject',0,b'\xFF\xFF\xFF\x1FSEM_FAILCRITICALERRORS',1,b'\xFF\xFF\xFF\x1FSEM_NOALIGNMENTFAULTEXCEPT',4,b'\xFF\xFF\xFF\x1FSEM_NOGPFAULTERRORBOX',2,b'\xF F\xFF\xFF\x1FSEM_NOOPENFILEERRORBOX',32768,b'\x00\x00\x65\x23SetErrorMode',0,b'\x00\x00\xB2\x23SetEvent',0,b'\x00\x00\x41\x23SetNamedPipeHandleState',0,b'\x00\x00\x39\x23TerminateProcess',0,b'\xFF\xFF\xFF\x1FWT_EXECUTEINWAITTHREAD',4,b'\xFF\xFF\xFF\x1FWT_EXECUTEONLYONCE',8,b'\x00\x00\x68\x23WaitForSingleObject',0,b'\x00\x00\x62\x23_get_osfhandle',0,b'\x00\x00\x10\x23_getch',0,b'\x00\x00\x10\x23_getche',0,b'\x00\x00\x76\x23_getwch',0,b'\x00\x00\x76\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\x78\x23_putwch',0,b'\x00\x00\x03\x23_setmode',0,b'\x00\x00\x00\x23_ungetch',0,b'\x00\x00\x73\x23_ungetwch',0), - _struct_unions = ((b'\x00\x00\x00\xC1\x00\x00\x00\x03$1',b'\x00\x00\xC0\x11DUMMYSTRUCTNAME',b'\x00\x00\x15\x11Pointer'),(b'\x00\x00\x00\xC0\x00\x00\x00\x02$2',b'\x00\x00\x18\x11Offset',b'\x00\x00\x18\x11OffsetHigh'),(b'\x00\x00\x00\xBA\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\xBE\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\x74\x11wShowWindow',b'\x00\x00\x74\x11cbReserved2',b'\x00\x00\xC2\x11lpReserved2',b'\x00\x00\x15\x11hStdInput',b'\x00\x00\x15\x11hStdOutput',b'\x00\x00\x15\x11hStdError'),(b'\x00\x00\x00\xB9\x00\x00\x00\x02_ OVERLAPPED',b'\x00\x00\x18\x11Internal',b'\x00\x00\x18\x11InternalHigh',b'\x00\x00\xC1\x11DUMMYUNIONNAME',b'\x00\x00\x15\x11hEvent'),(b'\x00\x00\x00\xBC\x00\x00\x00\x02_PostCallbackData',b'\x00\x00\x15\x11hCompletionPort',b'\x00\x00\x31\x11Overlapped'),(b'\x00\x00\x00\xBD\x00\x00\x00\x02_SECURITY_ATTRIBUTES',b'\x00\x00\x18\x11nLength',b'\x00\x00\x15\x11lpSecurityDescriptor',b'\x00\x00\x01\x11bInheritHandle')), - _typenames = (b'\x00\x00\x00\x31LPOVERLAPPED',b'\x00\x00\x00\x1CLPPROCESS_INFORMATION',b'\x00\x00\x00\xBBLPPostCallbackData',b'\x00\x00\x00\x7CLPSECURITY_ATTRIBUTES',b'\x00\x00\x00\x1BLPSTARTUPINFO',b'\x00\x00\x00\xB9OVERLAPPED',b'\x00\x00\x00\xBAPROCESS_INFORMATION',b'\x00\x00\x00\x7CPSECURITY_ATTRIBUTES',b'\x00\x00\x00\xBCPostCallbackData',b'\x00\x00\x00\xBDSECURITY_ATTRIBUTES',b'\x00\x00\x00\xBESTARTUPINFO',b'\x00\x00\x00\x27WAITORTIMERCALLBACK',b'\x00\x00\x00\x74wint_t'), + _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\xC6\x03\x00\x00\x13\x11\x00\x00\xCB\x03\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x13\x11\x00\x00\x13\x11\x00\x00\xC5\x03\x00\x00\xC1\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\xBC\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\xC0\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\x08\x01\x00\x00\x02\x0F\x00\x 00\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\x80\x03\x00\x00\x5E\x11\x00\x00\x15\x11\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x0A\x01\x00\x00\x5E\x11\x00\x00\x5E\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\x3B\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\x5E\x11\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x18\x0D\x00\x00\x02\x0F\x00\x00\x7B\x0D\x00\x00\x0 6\x01\x00\x00\x00\x0F\x00\x00\x7B\x0D\x00\x00\x00\x0F\x00\x00\x7B\x0D\x00\x00\x10\x01\x00\x00\x00\x0F\x00\x00\x15\x0D\x00\x00\xC4\x03\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\xC6\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x83\x11\x00\x00\x07\x01\x00\x00\x07\x01\x00\x00\x80\x03\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x86\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x83\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x86\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\x83\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x0A\x01\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x5E\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\x83\x11\x00\x00\x02\x0F\x00\x00\x15\x0D\x00\x00\x8C\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x83\x11\x00\x00\x0A\x01\x00\x00\x0A\x01\x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xCB\x0D \x00\x00\x15\x11\x00\x00\x02\x0F\x00\x00\xCB\x0D\x00\x00\x15\x11\x00\x00\x07\x01\x00\x00\x02\x0F\x00\x00\x04\x09\x00\x00\x02\x09\x00\x00\xC3\x03\x00\x00\x05\x09\x00\x00\x06\x09\x00\x00\x03\x09\x00\x00\x02\x01\x00\x00\x01\x09\x00\x00\x00\x09\x00\x00\xCA\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\x82\x23CreateEventA',0,b'\x00\x00\x88\x23CreateEventW',0,b'\x00\x00\x8E\x23CreateFileA',0,b'\x00\x00\xB0\x23CreateFileW',0,b'\x00\x00\x97\x23CreateNamedPipeA',0,b'\x00\x00\xA6\x23CreateNamedPipeW',0,b'\x00\x00\x1E\x23CreatePipe',0,b'\x00\x00\x12\x23CreateProcessA',0,b'\x00\x00\x5D\x23CreateProcessW',0,b'\x00\x00\x54\x23DuplicateHandle',0,b'\x00\x00\xA4\x23GetCurrentProcess',0,b'\x00\x00\x3D\x23GetExitCodeProcess',0,b'\x00\x00\x78\x23GetLastError',0,b'\x00\x00\x73\x23GetModuleFileNameW',0,b'\x00\x00\x33\x23GetOverlappedResult',0,b'\x00\x00\x41\x23GetQueuedCompletionStatus',0,b'\x00\x00\xA1\x23GetStdHandle',0,b'\x00\x00\x78\x23GetVersion',0,b'\x00\x00\x4E\x23PostQueuedCompletionStatus',0,b'\x00\x00\x24\x23RegisterWaitForSingleObject',0,b'\xFF\xFF\xFF\x1FSEM_FAILCRITICALERRORS',1,b'\xFF\xFF\xFF\x1FSEM_NOALIGNMENTFAULTEXCEPT',4,b '\xFF\xFF\xFF\x1FSEM_NOGPFAULTERRORBOX',2,b'\xFF\xFF\xFF\x1FSEM_NOOPENFILEERRORBOX',32768,b'\x00\x00\x6C\x23SetErrorMode',0,b'\x00\x00\xB9\x23SetEvent',0,b'\x00\x00\x48\x23SetNamedPipeHandleState',0,b'\x00\x00\x39\x23TerminateProcess',0,b'\xFF\xFF\xFF\x1FWT_EXECUTEINWAITTHREAD',4,b'\xFF\xFF\xFF\x1FWT_EXECUTEONLYONCE',8,b'\x00\x00\x6F\x23WaitForSingleObject',0,b'\x00\x00\x69\x23_get_osfhandle',0,b'\x00\x00\x10\x23_getch',0,b'\x00\x00\x10\x23_getche',0,b'\x00\x00\x7D\x23_getwch',0,b'\x00\x00\x7D\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\x7F\x23_putwch',0,b'\x00\x00\x03\x23_setmode',0,b'\x00\x00\x00\x23_ungetch',0,b'\x00\x00\x7A\x23_ungetwch',0), + _struct_unions = ((b'\x00\x00\x00\xC8\x00\x00\x00\x03$1',b'\x00\x00\xC7\x11DUMMYSTRUCTNAME',b'\x00\x00\x15\x11Pointer'),(b'\x00\x00\x00\xC7\x00\x00\x00\x02$2',b'\x00\x00\x18\x11Offset',b'\x00\x00\x18\x11OffsetHigh'),(b'\x00\x00\x00\xC1\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\xC5\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\x7B\x11wShowWindow',b'\x00\x00\x7B\x11cbReserved2',b'\x00\x00\xC9\x11lpReserved2',b'\x00\x00\x15\x11hStdInput',b'\x00\x00\x15\x11hStdOutput',b'\x00\x00\x15\x11hStdError'),(b'\x00\x00\x00\xC0\x00\x00\x00\x02_ OVERLAPPED',b'\x00\x00\x18\x11Internal',b'\x00\x00\x18\x11InternalHigh',b'\x00\x00\xC8\x11DUMMYUNIONNAME',b'\x00\x00\x15\x11hEvent'),(b'\x00\x00\x00\xC3\x00\x00\x00\x02_PostCallbackData',b'\x00\x00\x15\x11hCompletionPort',b'\x00\x00\x31\x11Overlapped'),(b'\x00\x00\x00\xC4\x00\x00\x00\x02_SECURITY_ATTRIBUTES',b'\x00\x00\x18\x11nLength',b'\x00\x00\x15\x11lpSecurityDescriptor',b'\x00\x00\x01\x11bInheritHandle')), + _typenames = (b'\x00\x00\x00\x31LPOVERLAPPED',b'\x00\x00\x00\x1CLPPROCESS_INFORMATION',b'\x00\x00\x00\xC2LPPostCallbackData',b'\x00\x00\x00\x83LPSECURITY_ATTRIBUTES',b'\x00\x00\x00\x1BLPSTARTUPINFO',b'\x00\x00\x00\xC0OVERLAPPED',b'\x00\x00\x00\xC1PROCESS_INFORMATION',b'\x00\x00\x00\x83PSECURITY_ATTRIBUTES',b'\x00\x00\x00\xC3PostCallbackData',b'\x00\x00\x00\xC4SECURITY_ATTRIBUTES',b'\x00\x00\x00\xC5STARTUPINFO',b'\x00\x00\x00\x27WAITORTIMERCALLBACK',b'\x00\x00\x00\x7Bwint_t'), ) diff --git a/lib_pypy/_winapi.py b/lib_pypy/_winapi.py --- a/lib_pypy/_winapi.py +++ b/lib_pypy/_winapi.py @@ -66,84 +66,6 @@ if not ret: raise _WinError() -class Overlapped(object): - def __init__(self, handle): - self.overlapped = _ffi.new('OVERLAPPED[1]') - self.handle = handle - self.readbuffer = None - self.pending = 0 - self.completed = 0 - self.writebuffer = None - self.overlapped[0].hEvent = \ - _kernel32.CreateEventW(NULL, True, False, NULL) - - def __del__(self): - # 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') - - @property - def event(self): - return None - - def GetOverlappedResult(self, wait): - transferred = _ffi.new('DWORD[1]', [0]) - res = _kernel32.GetOverlappedResult(self.handle, self.overlapped, transferred, wait != 0) - if res: - err = ERROR_SUCCESS - else: - err = GetLastError() - if err in (ERROR_SUCCESS, ERROR_MORE_DATA, ERROR_OPERATION_ABORTED): - self.completed = 1 - self.pending = 0 - elif res == ERROR_IO_INCOMPLETE: - pass - else: - self.pending = 0 - raise _WinError() - if self.completed and self.read_buffer: - if transferred != len(self.read_buffer): - raise _WinError() - return transferred[0], err - - def getbuffer(self): - xxx - return None - - def cancel(self): - xxx - return None - - -def ConnectNamedPipe(handle, overlapped=False): - if overlapped: - ov = Overlapped(handle) - else: - ov = Overlapped(None) - success = _kernel32.ConnectNamedPipe(handle, ov.overlapped) - if overlapped: - # Overlapped ConnectNamedPipe never returns a success code - assert success == 0 - err = _kernel32.GetLastError() - if err == ERROR_IO_PENDING: - ov.pending = 1 - elif err == ERROR_PIPE_CONNECTED: - _kernel32.SetEvent(ov.overlapped[0].hEvent) - else: - del ov - raise _WinError() - return ov - elif not success: - raise _WinError() def GetCurrentProcess(): return _handle2int(_kernel32.GetCurrentProcess()) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit