diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-11-09 16:17:24 +0000 |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-11-09 16:17:24 +0000 |
commit | 41c8321252a84d8a9d0ded374e7db7a4393036be (patch) | |
tree | d2e2f9c274be1c8b1e84b23863c9bda799356cb6 | |
parent | 20747fa167dc8224c01ab0ab2ece81c9c5927dec (diff) | |
download | cpython-git-41c8321252a84d8a9d0ded374e7db7a4393036be.tar.gz |
Fix SF buf #476953: Bad more for opening file gives bad msg.
If fopen() fails with EINVAL it means that the mode argument is
invalid. Return the mode in the error message instead of the
filename.
-rw-r--r-- | Lib/test/test_file.py | 11 | ||||
-rw-r--r-- | Objects/fileobject.c | 8 |
2 files changed, 17 insertions, 2 deletions
diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py index a85e07cacf..cb1bdce08e 100644 --- a/Lib/test/test_file.py +++ b/Lib/test/test_file.py @@ -46,4 +46,15 @@ else: print "writelines accepted sequence of non-string objects" f.close() +# verify that we get a sensible error message for bad made argument +bad_mode = "qwerty" +try: + open(TESTFN, bad_mode) +except IOError, msg: + s = str(msg) + if s.find(TESTFN) != -1 or s.find(bad_mode) == -1: + print "bad error message for invalid mode: %s" % s +else: + print "no error for invalid mode: %s" % bad_mode + os.unlink(TESTFN) diff --git a/Objects/fileobject.c b/Objects/fileobject.c index ebccc845cc..9284185be6 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -121,13 +121,17 @@ open_the_file(PyFileObject *f, char *name, char *mode) if (f->f_fp == NULL) { #ifdef NO_FOPEN_ERRNO /* Metroworks only, not testable, so unchanged */ - if ( errno == 0 ) { + if (errno == 0) { PyErr_SetString(PyExc_IOError, "Cannot open file"); Py_DECREF(f); return NULL; } #endif - PyErr_SetFromErrnoWithFilename(PyExc_IOError, name); + if (errno == EINVAL) + PyErr_Format(PyExc_IOError, "invalid argument: %s", + mode); + else + PyErr_SetFromErrnoWithFilename(PyExc_IOError, name); f = NULL; } return (PyObject *)f; |