mirror of
https://github.com/python/cpython.git
synced 2024-11-28 08:20:55 +01:00
Issue #12802: the Windows error ERROR_DIRECTORY (numbered 267) is now
mapped to POSIX errno ENOTDIR (previously EINVAL).
This commit is contained in:
parent
222b20844f
commit
a762285831
@ -5,6 +5,7 @@ import sys
|
||||
import unittest
|
||||
import pickle
|
||||
import weakref
|
||||
import errno
|
||||
|
||||
from test.support import (TESTFN, unlink, run_unittest, captured_output,
|
||||
gc_collect, cpython_only)
|
||||
@ -849,6 +850,13 @@ class ExceptionTests(unittest.TestCase):
|
||||
self.fail("RuntimeError not raised")
|
||||
self.assertEqual(wr(), None)
|
||||
|
||||
def test_errno_ENOTDIR(self):
|
||||
# Issue #12802: "not a directory" errors are ENOTDIR even on Windows
|
||||
with self.assertRaises(OSError) as cm:
|
||||
os.listdir(__file__)
|
||||
self.assertEqual(cm.exception.errno, errno.ENOTDIR, cm.exception)
|
||||
|
||||
|
||||
def test_main():
|
||||
run_unittest(ExceptionTests)
|
||||
|
||||
|
@ -10,6 +10,9 @@ What's New in Python 3.2.3?
|
||||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #12802: the Windows error ERROR_DIRECTORY (numbered 267) is now
|
||||
mapped to POSIX errno ENOTDIR (previously EINVAL).
|
||||
|
||||
- Accept bytes for the AST string type. This is temporary until a proper fix in
|
||||
3.3.
|
||||
|
||||
|
@ -72,6 +72,7 @@ int winerror_to_errno(int winerror)
|
||||
case 202: return 8;
|
||||
case 206: return 2;
|
||||
case 215: return 11;
|
||||
case 267: return 20;
|
||||
case 1816: return 12;
|
||||
default: return EINVAL;
|
||||
}
|
||||
|
@ -1,3 +1,6 @@
|
||||
#include <windows.h>
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
@ -6,15 +9,21 @@
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
_setmode(fileno(stdout), O_BINARY);
|
||||
printf("/* Generated file. Do not edit. */\n");
|
||||
printf("int winerror_to_errno(int winerror)\n");
|
||||
printf("{\n\tswitch(winerror) {\n");
|
||||
printf("{\n switch(winerror) {\n");
|
||||
for(i=1; i < 65000; i++) {
|
||||
_dosmaperr(i);
|
||||
if (errno == EINVAL)
|
||||
continue;
|
||||
printf("\t\tcase %d: return %d;\n", i, errno);
|
||||
if (errno == EINVAL) {
|
||||
/* Issue #12802 */
|
||||
if (i == ERROR_DIRECTORY)
|
||||
errno = ENOTDIR;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
printf(" case %d: return %d;\n", i, errno);
|
||||
}
|
||||
printf("\t\tdefault: return EINVAL;\n");
|
||||
printf("\t}\n}\n");
|
||||
printf(" default: return EINVAL;\n");
|
||||
printf(" }\n}\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user