diff -r e3a773fefddf Lib/test/test_exceptions.py --- a/Lib/test/test_exceptions.py Sat Jul 23 15:17:19 2011 +0200 +++ b/Lib/test/test_exceptions.py Sat Aug 27 08:25:21 2011 -0700 @@ -5,6 +5,7 @@ import unittest import pickle import weakref +import errno from test.support import (TESTFN, unlink, run_unittest, captured_output, gc_collect, cpython_only, no_tracing) @@ -790,6 +791,15 @@ self.fail("RuntimeError not raised") self.assertEqual(wr(), None) + def test_ENOTDIR_errno(self): + # os.listdir on file should raise OSError with errno ENOTDIR + try: + os.listdir(__file__) + except OSError as e: + self.assertEqual(errno.ENOTDIR, e.errno) + else: + self.fail("OSError not raised") + def test_main(): run_unittest(ExceptionTests) diff -r e3a773fefddf PC/errmap.h --- a/PC/errmap.h Sat Jul 23 15:17:19 2011 +0200 +++ b/PC/errmap.h Sat Aug 27 08:25:21 2011 -0700 @@ -1,78 +1,82 @@ -/* Generated file. Do not edit. */ -int winerror_to_errno(int winerror) -{ - switch(winerror) { - case 2: return 2; - case 3: return 2; - case 4: return 24; - case 5: return 13; - case 6: return 9; - case 7: return 12; - case 8: return 12; - case 9: return 12; - case 10: return 7; - case 11: return 8; - case 15: return 2; - case 16: return 13; - case 17: return 18; - case 18: return 2; - case 19: return 13; - case 20: return 13; - case 21: return 13; - case 22: return 13; - case 23: return 13; - case 24: return 13; - case 25: return 13; - case 26: return 13; - case 27: return 13; - case 28: return 13; - case 29: return 13; - case 30: return 13; - case 31: return 13; - case 32: return 13; - case 33: return 13; - case 34: return 13; - case 35: return 13; - case 36: return 13; - case 53: return 2; - case 65: return 13; - case 67: return 2; - case 80: return 17; - case 82: return 13; - case 83: return 13; - case 89: return 11; - case 108: return 13; - case 109: return 32; - case 112: return 28; - case 114: return 9; - case 128: return 10; - case 129: return 10; - case 130: return 9; - case 132: return 13; - case 145: return 41; - case 158: return 13; - case 161: return 2; - case 164: return 11; - case 167: return 13; - case 183: return 17; - case 188: return 8; - case 189: return 8; - case 190: return 8; - case 191: return 8; - case 192: return 8; - case 193: return 8; - case 194: return 8; - case 195: return 8; - case 196: return 8; - case 197: return 8; - case 198: return 8; - case 199: return 8; - case 200: return 8; - case 201: return 8; - case 202: return 8; - case 206: return 2; - case 215: return 11; - case 1816: return 12; - default: return EINVAL; - } -} +/* Generated file. Do not edit. */ +int winerror_to_errno(int winerror) +{ + switch(winerror) { + case 2: return 2; + case 3: return 2; + case 4: return 24; + case 5: return 13; + case 6: return 9; + case 7: return 12; + case 8: return 12; + case 9: return 12; + case 10: return 7; + case 11: return 8; + case 15: return 2; + case 16: return 13; + case 17: return 18; + case 18: return 2; + case 19: return 13; + case 20: return 13; + case 21: return 13; + case 22: return 13; + case 23: return 13; + case 24: return 13; + case 25: return 13; + case 26: return 13; + case 27: return 13; + case 28: return 13; + case 29: return 13; + case 30: return 13; + case 31: return 13; + case 32: return 13; + case 33: return 13; + case 34: return 13; + case 35: return 13; + case 36: return 13; + case 53: return 2; + case 65: return 13; + case 67: return 2; + case 80: return 17; + case 82: return 13; + case 83: return 13; + case 89: return 11; + case 108: return 13; + case 109: return 32; + case 112: return 28; + case 114: return 9; + case 128: return 10; + case 129: return 10; + case 130: return 9; + case 132: return 13; + case 145: return 41; + case 158: return 13; + case 161: return 2; + case 164: return 11; + case 167: return 13; + case 183: return 17; + case 188: return 8; + case 189: return 8; + case 190: return 8; + case 191: return 8; + case 192: return 8; + case 193: return 8; + case 194: return 8; + case 195: return 8; + case 196: return 8; + case 197: return 8; + case 198: return 8; + case 199: return 8; + case 200: return 8; + case 201: return 8; + case 202: return 8; + case 206: return 2; + case 215: return 11; + case 1816: return 12; + + // Additional mappings + case 267: return 20; + + default: return EINVAL; + } +} diff -r e3a773fefddf PC/generrmap.c --- a/PC/generrmap.c Sat Jul 23 15:17:19 2011 +0200 +++ b/PC/generrmap.c Sat Aug 27 08:25:21 2011 -0700 @@ -3,18 +3,42 @@ /* Extract the mapping of Win32 error codes to errno */ +/* Additional mappings not returned by _dosmaperr */ +struct error_map { + int win_error; + int errno_error; +}; + +struct error_map extra_errors[] = { + { 267, 20 } +}; + int main() { int i; printf("/* Generated file. Do not edit. */\n"); printf("int winerror_to_errno(int winerror)\n"); printf("{\n\tswitch(winerror) {\n"); + + /* Add errno mappings returned by _dosmaperr */ for(i=1; i < 65000; i++) { _dosmaperr(i); if (errno == EINVAL) continue; printf("\t\tcase %d: return %d;\n", i, errno); } + printf("\n"); + + /* Add additional mappings */ + printf("\t\t// Additional mappings\n"); + for(i=0; i < (sizeof(extra_errors) / sizeof(extra_errors[0])); i++) + { + printf("\t\tcase %d: return %d;\n", + extra_errors[i].win_error, + extra_errors[i].errno_error); + } + printf("\n"); + printf("\t\tdefault: return EINVAL;\n"); printf("\t}\n}\n"); }