mercurial/win32.py
changeset 33419 7c33adc823e0
parent 32676 4c3d9ee87382
child 33492 14af04391fb9
--- a/mercurial/win32.py	Wed Jul 12 15:27:56 2017 -0700
+++ b/mercurial/win32.py	Thu Mar 30 00:33:00 2017 -0400
@@ -212,7 +212,12 @@
 _kernel32.PeekNamedPipe.restype = _BOOL
 
 def _raiseoserror(name):
-    err = ctypes.WinError()
+    # Force the code to a signed int to avoid an 'int too large' error.
+    # See https://bugs.python.org/issue28474
+    code = _kernel32.GetLastError()
+    if code > 0x7fffffff:
+        code -= 2**32
+    err = ctypes.WinError(code=code)
     raise OSError(err.errno, '%s: %s' % (name, err.strerror))
 
 def _getfileinfo(name):