mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	Issue #16169: Fix ctypes.WinError()'s confusion between errno and winerror
This commit is contained in:
		
							parent
							
								
									38714d64d0
								
							
						
					
					
						commit
						ea69bd3ce1
					
				
					 3 changed files with 25 additions and 1 deletions
				
			
		| 
						 | 
					@ -456,7 +456,7 @@ if _os.name in ("nt", "ce"):
 | 
				
			||||||
            code = GetLastError()
 | 
					            code = GetLastError()
 | 
				
			||||||
        if descr is None:
 | 
					        if descr is None:
 | 
				
			||||||
            descr = FormatError(code).strip()
 | 
					            descr = FormatError(code).strip()
 | 
				
			||||||
        return WindowsError(code, descr)
 | 
					        return WindowsError(None, descr, None, code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if sizeof(c_uint) == sizeof(c_void_p):
 | 
					if sizeof(c_uint) == sizeof(c_void_p):
 | 
				
			||||||
    c_size_t = c_uint
 | 
					    c_size_t = c_uint
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,6 +67,28 @@ if sys.platform == "win32":
 | 
				
			||||||
            self.assertEqual(ex.text, "text")
 | 
					            self.assertEqual(ex.text, "text")
 | 
				
			||||||
            self.assertEqual(ex.details, ("details",))
 | 
					            self.assertEqual(ex.details, ("details",))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class TestWinError(unittest.TestCase):
 | 
				
			||||||
 | 
					        def test_winerror(self):
 | 
				
			||||||
 | 
					            # see Issue 16169
 | 
				
			||||||
 | 
					            import errno
 | 
				
			||||||
 | 
					            ERROR_INVALID_PARAMETER = 87
 | 
				
			||||||
 | 
					            msg = FormatError(ERROR_INVALID_PARAMETER).strip()
 | 
				
			||||||
 | 
					            args = (errno.EINVAL, msg, None, ERROR_INVALID_PARAMETER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            e = WinError(ERROR_INVALID_PARAMETER)
 | 
				
			||||||
 | 
					            self.assertEqual(e.args, args)
 | 
				
			||||||
 | 
					            self.assertEqual(e.errno, errno.EINVAL)
 | 
				
			||||||
 | 
					            self.assertEqual(e.winerror, ERROR_INVALID_PARAMETER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            windll.kernel32.SetLastError(ERROR_INVALID_PARAMETER)
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                raise WinError()
 | 
				
			||||||
 | 
					            except OSError as exc:
 | 
				
			||||||
 | 
					                e = exc
 | 
				
			||||||
 | 
					            self.assertEqual(e.args, args)
 | 
				
			||||||
 | 
					            self.assertEqual(e.errno, errno.EINVAL)
 | 
				
			||||||
 | 
					            self.assertEqual(e.winerror, ERROR_INVALID_PARAMETER)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Structures(unittest.TestCase):
 | 
					class Structures(unittest.TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_struct_by_value(self):
 | 
					    def test_struct_by_value(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,6 +37,8 @@ Core and Builtins
 | 
				
			||||||
Library
 | 
					Library
 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Issue #16169: Fix ctypes.WinError()'s confusion between errno and winerror.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element
 | 
					- Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element
 | 
				
			||||||
  element_factory (fixes a regression in SimpleTAL).
 | 
					  element_factory (fixes a regression in SimpleTAL).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue