Commit a7622858 authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #12802: the Windows error ERROR_DIRECTORY (numbered 267) is now

mapped to POSIX errno ENOTDIR (previously EINVAL).
parent 222b2084
......@@ -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;
}
......
#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)
if (errno == EINVAL) {
/* Issue #12802 */
if (i == ERROR_DIRECTORY)
errno = ENOTDIR;
else
continue;
printf("\t\tcase %d: return %d;\n", i, errno);
}
printf("\t\tdefault: return EINVAL;\n");
printf("\t}\n}\n");
printf(" case %d: return %d;\n", i, errno);
}
printf(" default: return EINVAL;\n");
printf(" }\n}\n");
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment