From: Neal Norwitz <nnorwitz@gmail.com>
Date: Thu, 9 Mar 2006 05:58:11 +0000 (+0000)
Subject: Try to be a bit more consistent on all platforms:
X-Git-Tag: v2.5a0~306
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=72c2c062d71c499863ff6e260525faaea4a53dbb;p=python

Try to be a bit more consistent on all platforms:
  python .
  python < .

both print a message, return non-zero and do not core dump.
---

diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index 2d293c90cb..a4a656d451 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -16,19 +16,8 @@ class CmdLineTest(unittest.TestCase):
         return subprocess.call([sys.executable, cmd_line], stderr=subprocess.PIPE)
 
     def test_directories(self):
-        if sys.platform == 'win32':
-            # Exit code for "python .", Error 13: permission denied = 2
-            expected_exit_code = 2
-        elif sys.platform.startswith('freebsd'):
-            # On FreeBSD, it more likely raise SyntaxError for binary
-            # directory data.
-            expected_exit_code = 1
-        else:
-            # Linux has no problem with "python .", Exit code = 0
-            expected_exit_code = 0
-        self.assertEqual(self.exit_code('.'), expected_exit_code)
-
-        self.assertTrue(self.exit_code('< .') != 0)
+        self.assertNotEqual(self.exit_code('.'), 0)
+        self.assertNotEqual(self.exit_code('< .'), 0)
 
     def verify_valid_flag(self, cmd_line):
         data = self.start_python(cmd_line)
diff --git a/Modules/main.c b/Modules/main.c
index f6fa48bdd6..8e7c50b25f 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -364,7 +364,8 @@ Py_Main(int argc, char **argv)
 				struct stat sb;
 				if (fstat(fileno(fp), &sb) == 0 &&
 				    S_ISDIR(sb.st_mode)) {
-					fprintf(stderr, "%s: warning '%s' is a directory\n", argv[0], filename);
+					fprintf(stderr, "%s: '%s' is a directory, cannot continue\n", argv[0], filename);
+					return 1;
 				}
 			}
 		}
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 6eadd06d9c..dfa6ac84d9 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1037,7 +1037,10 @@ _PySys_Init(void)
 		struct stat sb;
 		if (fstat(fileno(stdin), &sb) == 0 &&
 		    S_ISDIR(sb.st_mode)) {
-			Py_FatalError("<stdin> is a directory");
+			/* There's nothing more we can do. */
+			/* Py_FatalError() will core dump, so just exit. */
+			PySys_WriteStderr("Python error: <stdin> is a directory, cannot continue\n");
+			exit(EXIT_FAILURE);
 		}
 	}