diff Python/pythonrun.c @ 41044:c8ed4aea6c58 legacy-trunk

Patch #703779: unset __file__ in __main__ after running a file. This makes the filenames the warning module prints much more sensible when a PYTHONSTARTUP file is used.
author Georg Brandl <georg@python.org>
date Wed, 07 Mar 2007 00:40:28 +0000
parents 728c60e85efa
children a87bcc37bf0f
line wrap: on
line diff
--- a/Python/pythonrun.c	Wed Mar 07 00:34:46 2007 +0000
+++ b/Python/pythonrun.c	Wed Mar 07 00:40:28 2007 +0000
@@ -849,6 +849,7 @@
 {
 	PyObject *m, *d, *v;
 	const char *ext;
+	int set_file_name = 0, ret;
 
 	m = PyImport_AddModule("__main__");
 	if (m == NULL)
@@ -862,6 +863,7 @@
 			Py_DECREF(f);
 			return -1;
 		}
+		set_file_name = 1;
 		Py_DECREF(f);
 	}
 	ext = filename + strlen(filename) - 4;
@@ -871,7 +873,8 @@
 			fclose(fp);
 		if ((fp = fopen(filename, "rb")) == NULL) {
 			fprintf(stderr, "python: Can't reopen .pyc file\n");
-			return -1;
+			ret = -1;
+			goto done;
 		}
 		/* Turn on optimization if a .pyo file is given */
 		if (strcmp(ext, ".pyo") == 0)
@@ -883,12 +886,17 @@
 	}
 	if (v == NULL) {
 		PyErr_Print();
-		return -1;
+		ret = -1;
+		goto done;
 	}
 	Py_DECREF(v);
 	if (Py_FlushLine())
 		PyErr_Clear();
-	return 0;
+	ret = 0;
+  done:
+	if (set_file_name && PyDict_DelItemString(d, "__file__"))
+		PyErr_Clear();
+	return ret;
 }
 
 int