Author: andrewjlawrence
Branch: winoverlapped
Changeset: r96422:afa98536e149
Date: 2019-04-06 14:36 +0100
http://bitbucket.org/pypy/pypy/changeset/afa98536e149/

Log:    Replaced calls to _WinError with SetFromWindowsErr

diff --git a/lib_pypy/_overlapped.py b/lib_pypy/_overlapped.py
--- a/lib_pypy/_overlapped.py
+++ b/lib_pypy/_overlapped.py
@@ -20,7 +20,7 @@
 GetVersion = _kernel32.GetVersion
 NULL = _ffi.NULL
 
-from _winapi import INVALID_HANDLE_VALUE, _MAX_PATH , _Z
+from _winapi import INVALID_HANDLE_VALUE, _MAX_PATH , _Z, SetFromWindowsErr
 import _winapi
 
 #
@@ -181,7 +181,7 @@
             if err != _winapi.ERROR_SUCCESS and \
                err != _winapi.ERROR_NOT_FOUND and \
                err != _winapi.ERROR_OPERATION_ABORTED:
-               raise _winapi._WinError()
+               SetFromWindowsErr(err)
         if self.overlapped[0].hEvent != 0:
             _winapi.CloseHandle(self.overlapped[0].hEvent)
 
@@ -226,7 +226,7 @@
             ### If we are to support xp we will need to dynamically load the 
below method
             result = _kernel32.CancelIoEx(self.handle, self.overlapped)
         if (not result and _kernel32.GetLastError() != 
_winapi.ERROR_NOT_FOUND):
-            raise _winapi._WinError()
+            SetFromWindowsErr(0)
      
     def WSARecv(self ,handle, size, flags):
         handle = _int2handle(handle)
@@ -257,12 +257,12 @@
         
         if self.error == _winapi.ERROR_BROKEN_PIPE:
             mark_as_completed(self.overlapped)
-            raise _winapi._WinError()
+            SetFromWindowsErr(self.error)
         elif self.error in [_winapi.ERROR_SUCCESS, _winapi.ERROR_MORE_DATA, 
_winapi.ERROR_IO_PENDING] :
             return None
         else:
             self.type = OverlappedType.TYPE_NOT_STARTED
-            raise _winapi._WinError()
+            SetFromWindowsErr(self.error)
 
     def WSASend(self ,handle, bufobj, flags):
         handle = _int2handle(handle)
@@ -289,7 +289,7 @@
             return None
         else:
             self.type = OverlappedType.TYPE_NOT_STARTED
-            raise _winapi._WinError()
+            SetFromWindowsErr(self.error)
 
     def getresult(self, wait=False):
         return self.GetOverlappedResult(wait)
@@ -313,7 +313,7 @@
             mark_as_completed(self.overlapped)
             return True
         else:
-            raise _winapi._WinError()
+            SetFromWindowsErr(err)
     
     def ReadFile(self, handle, size):
         self.type = OverlappedType.TYPE_READ
@@ -333,12 +333,12 @@
         
         if err == _winapi.ERROR_BROKEN_PIPE:
             mark_as_completed(self.overlapped)
-            raise _winapi._WinError()
+            SetFromWindowsErr(err)
         elif err in [_winapi.ERROR_SUCCESS, _winapi.ERROR_MORE_DATA, 
_winapi.ERROR_IO_PENDING]:
            return None
         else:
            self.type = OverlappedType.TYPE_NOT_STARTED
-           raise _winapi._WinError()
+           SetFromWindowsErr(err)
 
     def WriteFile(self, handle, buffer):
         self.handle = _int2handle(handle)
@@ -362,7 +362,7 @@
             return None
         else:
             self.type = OverlappedType.TYPE_NOT_STARTED
-            raise _winapi.WinError()
+            SetFromWindowsErr(self.error)
     
     def AcceptEx(self, listensocket, acceptsocket):
         listensocket = _int2handle(listensocket)
@@ -393,7 +393,7 @@
             return None
         else:
             self.type = OverlappedType.TYPE_NOT_STARTED
-            raise _winapi.WinError()
+            SetFromWindowsErr(0)
 
     def DisconnectEx(self, socket, flags):
         xxx
@@ -428,7 +428,7 @@
             return None
         else:
             self.type = OverlappedType.TYPE_NOT_STARTED
-            raise _winapi.WinError()
+            SetFromWindowsErr(0)
 
     @property
     def pending(self):
@@ -465,7 +465,7 @@
                                               completionkey, 
                                               numberofconcurrentthreads)
     if result == _ffi.NULL:
-        raise _winapi._WinError()
+        raise SetFromWindowsErr(0)
     
     return result
 
@@ -516,7 +516,7 @@
                                                 miliseconds, 
                                                 
_kernel32.WT_EXECUTEINWAITTHREAD | _kernel32.WT_EXECUTEONLYONCE)
     if not ret:
-        raise _winapi._WinError()
+        SetFromWindowsErr(0)
     
     return _handle2int(newwaitobject[0])
 
@@ -533,7 +533,7 @@
     err = _kernel32.GetLastError()
     
     if handle == INVALID_HANDLE_VALUE or err == _winapi.ERROR_PIPE_BUSY:
-        raise _winapi._WinError()
+        SetFromWindowsErr(err)
         
     return _handle2int(handle)
 
@@ -542,9 +542,9 @@
     waitevent = _int2handle(event)
     
     ret = _kernel32.UnregisterWaitEx(waithandle, waitevent)
-    
+     
     if not ret:
-        raise _winapi._WinError()
+        SetFromWindowsErr(0)
 
 def UnregisterWait(handle):
     handle = _int2handle(handle)
@@ -552,7 +552,7 @@
     ret = _kernel32.UnregisterWait(handle)
     
     if not ret:
-        raise _winapi._WinError()
+        SetFromWindowsErr(0)
 
 def BindLocal(socket, family):
     socket = _int2handle(socket)
@@ -573,21 +573,7 @@
         raise ValueError()
     
     if result == SOCKET_ERROR:
-        raise _winapi._WinError()
-
-
-# In CPython this function converts a windows error into a python object
-# Not sure what we should do here.
-def SetFromWindowsErr(err):
-    if err == _winapi.ERROR_CONNECTION_REFUSED:
-        type = ConnectionRefusedError;
-    elif err == _winapi.ERROR_CONNECTION_ABORTED:
-        type = ConnectionAbortedError;
-    else:
-        type = WindowsError;
-
-    return _winapi._WinError(type);
-
+        SetFromWindowsErr(0)
 
 def HasOverlappedIoCompleted(overlapped):
     return (overlapped.Internal != STATUS_PENDING)
diff --git a/lib_pypy/_winapi.py b/lib_pypy/_winapi.py
--- a/lib_pypy/_winapi.py
+++ b/lib_pypy/_winapi.py
@@ -17,13 +17,26 @@
 NULL = _ffi.NULL
 
 # Now the _subprocess module implementation
-
-
 def _WinError(type=WindowsError):
     code, message = _ffi.getwinerror()
     excep = type(None, message, None ,code)
     raise excep
 
+# In CPython this function converts a windows error into a python object
+# Not sure what we should do here.
+def SetFromWindowsErr(err):
+    if err == 0:
+       err = _kernel32.GetLastError()
+
+    if err == ERROR_CONNECTION_REFUSED:
+        type = ConnectionRefusedError
+    elif err == ERROR_CONNECTION_ABORTED:
+        type = ConnectionAbortedError
+    else:
+        type = WindowsError
+
+    return _WinError(type)
+
 def _int2handle(val):
     return _ffi.cast("HANDLE", val)
 
@@ -38,20 +51,20 @@
     res = _kernel32.CreatePipe(handles, handles + 1, NULL, size)
 
     if not res:
-        raise _WinError()
+        SetFromWindowsErr(0)
 
     return _handle2int(handles[0]), _handle2int(handles[1])
 
 def CreateNamedPipe(*args):
     handle = _kernel32.CreateNamedPipeW(*args)
     if handle == INVALID_HANDLE_VALUE:
-        raise _WinError()
+        SetFromWindowsErr(0)
     return _handle2int(handle)
 
 def CreateFile(*args):
     handle = _kernel32.CreateFileW(*args)
     if handle == INVALID_HANDLE_VALUE:
-        raise _WinError()
+        SetFromWindowsErr(0)
     return _handle2int(handle)
 
 def SetNamedPipeHandleState(namedpipe, mode, max_collection_count, 
collect_data_timeout):
@@ -93,7 +106,8 @@
                 raise RuntimeError('deleting an overlapped struct with a 
pending operation not supported')
 
     @property
-    def event(self):
+    def event(self): 
+        xxx
         return None
 
     def GetOverlappedResult(self, wait):
@@ -142,10 +156,10 @@
             _kernel32.SetEvent(ov.overlapped[0].hEvent)
         else:
             del ov
-            raise _WinError()
+            SetFromWindowsErr(err)
         return ov
     elif not success:
-        raise _WinError()
+        SetFromWindowsErr(0)
 
 def GetCurrentProcess():
     return _handle2int(_kernel32.GetCurrentProcess())
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to