#3703 unhelpful _fileio.FileIO error message when trying to open a directory

Reviewer: Gregory P. Smith
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py
index a8b15fa..5a0e1a6 100644
--- a/Lib/test/test_fileio.py
+++ b/Lib/test/test_fileio.py
@@ -101,6 +101,17 @@
             # should raise on closed file
             self.assertRaises(ValueError, method)
 
+    def testOpendir(self):
+        # Issue 3703: opening a directory should fill the errno
+        # Windows always returns "[Errno 13]: Permission denied
+        # Unix calls dircheck() and returns "[Errno 21]: Is a directory"
+        try:
+            _fileio._FileIO('.', 'r')
+        except IOError as e:
+            self.assertNotEqual(e.errno, 0)
+        else:
+            self.fail("Should have raised IOError")
+
 
 class OtherFileTests(unittest.TestCase):
 
diff --git a/Misc/NEWS b/Misc/NEWS
index c41f10c..5ccce4b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -52,6 +52,9 @@
 
 - Fixed two format strings in the _collections module.
 
+- #3703 _fileio.FileIO gave unhelpful error message when trying to open a
+   directory.
+
 Extension Modules
 -----------------
 
diff --git a/Modules/_fileio.c b/Modules/_fileio.c
index d6f004f..c3d61b4 100644
--- a/Modules/_fileio.c
+++ b/Modules/_fileio.c
@@ -262,7 +262,7 @@
 #endif
 			self->fd = open(name, flags, 0666);
 		Py_END_ALLOW_THREADS
-		if (self->fd < 0 || dircheck(self) < 0) {
+		if (self->fd < 0) {
 #ifdef MS_WINDOWS
 			PyErr_SetFromErrnoWithUnicodeFilename(PyExc_IOError, widename);
 #else
@@ -270,6 +270,8 @@
 #endif
 			goto error;
 		}
+		if(dircheck(self) < 0)
+			goto error;
 	}
 
 	goto done;