mirror of https://github.com/python/cpython
#4764 set IOError.filename when trying to open a directory on POSIX platforms
This commit is contained in:
parent
732479f50b
commit
fe231b07e4
|
@ -125,6 +125,19 @@ class AutoFileTests(unittest.TestCase):
|
|||
|
||||
class OtherFileTests(unittest.TestCase):
|
||||
|
||||
def testOpenDir(self):
|
||||
this_dir = os.path.dirname(__file__)
|
||||
for mode in (None, "w"):
|
||||
try:
|
||||
if mode:
|
||||
f = open(this_dir, mode)
|
||||
else:
|
||||
f = open(this_dir)
|
||||
except IOError as e:
|
||||
self.assertEqual(e.filename, this_dir)
|
||||
else:
|
||||
self.fail("opening a directory didn't raise an IOError")
|
||||
|
||||
def testModeStrings(self):
|
||||
# check invalid mode strings
|
||||
for mode in ("", "aU", "wU+"):
|
||||
|
|
|
@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 1
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- Issue #4764: IOError.filename is set when trying to open a directory on POSIX
|
||||
systems.
|
||||
|
||||
- Issue #4759: None is now allowed as the first argument of
|
||||
bytearray.translate(). It was always allowed for bytes.translate().
|
||||
|
||||
|
|
|
@ -132,8 +132,8 @@ dircheck(PyFileObject* f)
|
|||
if (fstat(fileno(f->f_fp), &buf) == 0 &&
|
||||
S_ISDIR(buf.st_mode)) {
|
||||
char *msg = strerror(EISDIR);
|
||||
PyObject *exc = PyObject_CallFunction(PyExc_IOError, "(is)",
|
||||
EISDIR, msg);
|
||||
PyObject *exc = PyObject_CallFunction(PyExc_IOError, "(isO)",
|
||||
EISDIR, msg, f->f_name);
|
||||
PyErr_SetObject(PyExc_IOError, exc);
|
||||
Py_XDECREF(exc);
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue