Constify filenames and scripts. Fixes #651362.
diff --git a/Python/compile.c b/Python/compile.c
index d612e5b..b438ce4 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -472,7 +472,7 @@
 	int c_begin;		/* begin of current loop, for 'continue' */
 	int c_block[CO_MAXBLOCKS]; /* stack of block types */
 	int c_nblocks;		/* current block stack level */
-	char *c_filename;	/* filename of current node */
+	const char *c_filename;	/* filename of current node */
 	char *c_name;		/* name of object (e.g. function) */
 	int c_lineno;		/* Current line number */
 	int c_stacklevel;	/* Current stack level */
@@ -574,8 +574,8 @@
 
 /* Prototype forward declarations */
 
-static int issue_warning(char *, char *, int);
-static int com_init(struct compiling *, char *);
+static int issue_warning(const char *, const char *, int);
+static int com_init(struct compiling *, const char *);
 static void com_free(struct compiling *);
 static void com_push(struct compiling *, int);
 static void com_pop(struct compiling *, int);
@@ -597,7 +597,7 @@
 static void com_assign(struct compiling *, node *, int, node *);
 static void com_assign_name(struct compiling *, node *, int);
 static PyCodeObject *icompile(node *, struct compiling *);
-static PyCodeObject *jcompile(node *, char *, struct compiling *,
+static PyCodeObject *jcompile(node *, const char *, struct compiling *,
 			      PyCompilerFlags *);
 static PyObject *parsestrplus(struct compiling*, node *);
 static PyObject *parsestr(struct compiling *, char *);
@@ -654,7 +654,7 @@
 #define DUMP(N) dump(N, 0, -1)
 
 static int
-com_init(struct compiling *c, char *filename)
+com_init(struct compiling *c, const char *filename)
 {
 	memset((void *)c, '\0', sizeof(struct compiling));
 	if ((c->c_code = PyString_FromStringAndSize((char *)NULL,
@@ -1182,7 +1182,9 @@
 				    "hex/oct constants > sys.maxint "
 				    "will return positive values "
 				    "in Python 2.4 and up",
-				    c->c_filename,
+				    /* XXX: Give WarnExplicit
+				       a const char* argument. */
+				    (char*)c->c_filename,
 				    c->c_lineno,
 				    NULL,
 				    NULL) < 0)
@@ -4142,19 +4144,19 @@
 }
 
 PyCodeObject *
-PyNode_Compile(node *n, char *filename)
+PyNode_Compile(node *n, const char *filename)
 {
 	return PyNode_CompileFlags(n, filename, NULL);
 }
 
 PyCodeObject *
-PyNode_CompileFlags(node *n, char *filename, PyCompilerFlags *flags)
+PyNode_CompileFlags(node *n, const char *filename, PyCompilerFlags *flags)
 {
 	return jcompile(n, filename, NULL, flags);
 }
 
 struct symtable *
-PyNode_CompileSymtable(node *n, char *filename)
+PyNode_CompileSymtable(node *n, const char *filename)
 {
 	struct symtable *st;
 	PyFutureFeatures *ff;
@@ -4191,7 +4193,7 @@
 }
 
 static PyCodeObject *
-jcompile(node *n, char *filename, struct compiling *base,
+jcompile(node *n, const char *filename, struct compiling *base,
 	 PyCompilerFlags *flags)
 {
 	struct compiling sc;
@@ -4351,7 +4353,7 @@
 /* Helper functions to issue warnings */
 
 static int
-issue_warning(char *msg, char *filename, int lineno)
+issue_warning(const char *msg, const char *filename, int lineno)
 {
 	if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, filename,
 			       lineno, NULL, NULL) < 0)	{
diff --git a/Python/errors.c b/Python/errors.c
index 95c24a6..e509606 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -637,9 +637,9 @@
 
 /* Warning with explicit origin */
 int
-PyErr_WarnExplicit(PyObject *category, char *message,
-		   char *filename, int lineno,
-		   char *module, PyObject *registry)
+PyErr_WarnExplicit(PyObject *category, const char *message,
+		   const char *filename, int lineno,
+		   const char *module, PyObject *registry)
 {
 	PyObject *mod, *dict, *func = NULL;
 
@@ -679,7 +679,7 @@
    to make printing of exceptions believe it is a syntax error. */
 
 void
-PyErr_SyntaxLocation(char *filename, int lineno)
+PyErr_SyntaxLocation(const char *filename, int lineno)
 {
 	PyObject *exc, *v, *tb, *tmp;
 
@@ -743,7 +743,7 @@
 */
 
 PyObject *
-PyErr_ProgramText(char *filename, int lineno)
+PyErr_ProgramText(const char *filename, int lineno)
 {
 	FILE *fp;
 	int i;
diff --git a/Python/future.c b/Python/future.c
index beec9fc..377ad9a 100644
--- a/Python/future.c
+++ b/Python/future.c
@@ -14,7 +14,7 @@
 #define FUTURE_POSSIBLE(FF) ((FF)->ff_last_lineno == -1)
 
 static int
-future_check_features(PyFutureFeatures *ff, node *n, char *filename)
+future_check_features(PyFutureFeatures *ff, node *n, const char *filename)
 {
 	int i;
 	char *feature;
@@ -54,7 +54,7 @@
 }
 
 static void
-future_error(node *n, char *filename)
+future_error(node *n, const char *filename)
 {
 	PyErr_SetString(PyExc_SyntaxError,
 			"from __future__ imports must occur at the "
@@ -89,7 +89,7 @@
 */
 
 static int
-future_parse(PyFutureFeatures *ff, node *n, char *filename)
+future_parse(PyFutureFeatures *ff, node *n, const char *filename)
 {
 	int i, r;
  loop:
@@ -240,7 +240,7 @@
 }
 
 PyFutureFeatures *
-PyNode_Future(node *n, char *filename)
+PyNode_Future(node *n, const char *filename)
 {
 	PyFutureFeatures *ff;
 
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index c2508fa..e41d618 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -32,11 +32,11 @@
 /* Forward */
 static void initmain(void);
 static void initsite(void);
-static PyObject *run_err_node(node *, char *, PyObject *, PyObject *,
+static PyObject *run_err_node(node *, const char *, PyObject *, PyObject *,
 			      PyCompilerFlags *);
-static PyObject *run_node(node *, char *, PyObject *, PyObject *,
+static PyObject *run_node(node *, const char *, PyObject *, PyObject *,
 			  PyCompilerFlags *);
-static PyObject *run_pyc_file(FILE *, char *, PyObject *, PyObject *,
+static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
 			      PyCompilerFlags *);
 static void err_input(perrdetail *);
 static void initsigs(void);
@@ -458,25 +458,25 @@
 /* Parse input from a file and execute it */
 
 int
-PyRun_AnyFile(FILE *fp, char *filename)
+PyRun_AnyFile(FILE *fp, const char *filename)
 {
 	return PyRun_AnyFileExFlags(fp, filename, 0, NULL);
 }
 
 int
-PyRun_AnyFileFlags(FILE *fp, char *filename, PyCompilerFlags *flags)
+PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
 {
 	return PyRun_AnyFileExFlags(fp, filename, 0, flags);
 }
 
 int
-PyRun_AnyFileEx(FILE *fp, char *filename, int closeit)
+PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)
 {
 	return PyRun_AnyFileExFlags(fp, filename, closeit, NULL);
 }
 
 int
-PyRun_AnyFileExFlags(FILE *fp, char *filename, int closeit, 
+PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, 
 		     PyCompilerFlags *flags)
 {
 	if (filename == NULL)
@@ -492,13 +492,13 @@
 }
 
 int
-PyRun_InteractiveLoop(FILE *fp, char *filename)
+PyRun_InteractiveLoop(FILE *fp, const char *filename)
 {
 	return PyRun_InteractiveLoopFlags(fp, filename, NULL);
 }
 
 int
-PyRun_InteractiveLoopFlags(FILE *fp, char *filename, PyCompilerFlags *flags)
+PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
 {
 	PyObject *v;
 	int ret;
@@ -533,7 +533,7 @@
 }
 
 int
-PyRun_InteractiveOne(FILE *fp, char *filename)
+PyRun_InteractiveOne(FILE *fp, const char *filename)
 {
 	return PyRun_InteractiveOneFlags(fp, filename, NULL);
 }
@@ -548,7 +548,7 @@
 #endif
 
 int
-PyRun_InteractiveOneFlags(FILE *fp, char *filename, PyCompilerFlags *flags)
+PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
 {
 	PyObject *m, *d, *v, *w;
 	node *n;
@@ -602,7 +602,7 @@
 }
 
 int
-PyRun_SimpleFile(FILE *fp, char *filename)
+PyRun_SimpleFile(FILE *fp, const char *filename)
 {
 	return PyRun_SimpleFileEx(fp, filename, 0);
 }
@@ -611,7 +611,7 @@
    the file type, and, if we may close it, at the first few bytes. */
 
 static int
-maybe_pyc_file(FILE *fp, char* filename, char* ext, int closeit)
+maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
 {
 	if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
 		return 1;
@@ -655,17 +655,17 @@
 } 
 
 int
-PyRun_SimpleFileEx(FILE *fp, char *filename, int closeit)
+PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)
 {
 	return PyRun_SimpleFileExFlags(fp, filename, closeit, NULL);
 }
 
 int
-PyRun_SimpleFileExFlags(FILE *fp, char *filename, int closeit,
+PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
 			PyCompilerFlags *flags)
 {
 	PyObject *m, *d, *v;
-	char *ext;
+	const char *ext;
 
 	m = PyImport_AddModule("__main__");
 	if (m == NULL)
@@ -709,13 +709,13 @@
 }
 
 int
-PyRun_SimpleString(char *command)
+PyRun_SimpleString(const char *command)
 {
 	return PyRun_SimpleStringFlags(command, NULL);
 }
 
 int
-PyRun_SimpleStringFlags(char *command, PyCompilerFlags *flags)
+PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
 {
 	PyObject *m, *d, *v;
 	m = PyImport_AddModule("__main__");
@@ -734,8 +734,8 @@
 }
 
 static int
-parse_syntax_error(PyObject *err, PyObject **message, char **filename,
-		   int *lineno, int *offset, char **text)
+parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
+		   int *lineno, int *offset, const char **text)
 {
 	long hold;
 	PyObject *v;
@@ -804,7 +804,7 @@
 }
 
 static void
-print_error_text(PyObject *f, int offset, char *text)
+print_error_text(PyObject *f, int offset, const char *text)
 {
 	char *nl;
 	if (offset >= 0) {
@@ -936,7 +936,7 @@
 		    PyObject_HasAttrString(v, "print_file_and_line"))
 		{
 			PyObject *message;
-			char *filename, *text;
+			const char *filename, *text;
 			int lineno, offset;
 			if (!parse_syntax_error(v, &message, &filename,
 						&lineno, &offset, &text))
@@ -1016,21 +1016,21 @@
 }
 
 PyObject *
-PyRun_String(char *str, int start, PyObject *globals, PyObject *locals)
+PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
 {
 	return run_err_node(PyParser_SimpleParseString(str, start),
 			    "<string>", globals, locals, NULL);
 }
 
 PyObject *
-PyRun_File(FILE *fp, char *filename, int start, PyObject *globals,
+PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals,
 	   PyObject *locals)
 {
 	return PyRun_FileEx(fp, filename, start, globals, locals, 0);
 }
 
 PyObject *
-PyRun_FileEx(FILE *fp, char *filename, int start, PyObject *globals,
+PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals,
 	     PyObject *locals, int closeit)
 {
 	node *n = PyParser_SimpleParseFile(fp, filename, start);
@@ -1040,7 +1040,7 @@
 }
 
 PyObject *
-PyRun_StringFlags(char *str, int start, PyObject *globals, PyObject *locals,
+PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals,
 		  PyCompilerFlags *flags)
 {
 	return run_err_node(PyParser_SimpleParseStringFlags(
@@ -1049,7 +1049,7 @@
 }
 
 PyObject *
-PyRun_FileFlags(FILE *fp, char *filename, int start, PyObject *globals,
+PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals,
 		PyObject *locals, PyCompilerFlags *flags)
 {
 	return PyRun_FileExFlags(fp, filename, start, globals, locals, 0,
@@ -1057,7 +1057,7 @@
 }
 
 PyObject *
-PyRun_FileExFlags(FILE *fp, char *filename, int start, PyObject *globals,
+PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
 		  PyObject *locals, int closeit, PyCompilerFlags *flags)
 {
 	node *n = PyParser_SimpleParseFileFlags(fp, filename, start,
@@ -1068,7 +1068,7 @@
 }
 
 static PyObject *
-run_err_node(node *n, char *filename, PyObject *globals, PyObject *locals,
+run_err_node(node *n, const char *filename, PyObject *globals, PyObject *locals,
 	     PyCompilerFlags *flags)
 {
 	if (n == NULL)
@@ -1077,7 +1077,7 @@
 }
 
 static PyObject *
-run_node(node *n, char *filename, PyObject *globals, PyObject *locals,
+run_node(node *n, const char *filename, PyObject *globals, PyObject *locals,
 	 PyCompilerFlags *flags)
 {
 	PyCodeObject *co;
@@ -1092,7 +1092,7 @@
 }
 
 static PyObject *
-run_pyc_file(FILE *fp, char *filename, PyObject *globals, PyObject *locals,
+run_pyc_file(FILE *fp, const char *filename, PyObject *globals, PyObject *locals,
 	     PyCompilerFlags *flags)
 {
 	PyCodeObject *co;
@@ -1124,13 +1124,13 @@
 }
 
 PyObject *
-Py_CompileString(char *str, char *filename, int start)
+Py_CompileString(const char *str, const char *filename, int start)
 {
 	return Py_CompileStringFlags(str, filename, start, NULL);
 }
 
 PyObject *
-Py_CompileStringFlags(char *str, char *filename, int start, 
+Py_CompileStringFlags(const char *str, const char *filename, int start, 
 		      PyCompilerFlags *flags)
 {
 	node *n;
@@ -1146,7 +1146,7 @@
 }
 
 struct symtable *
-Py_SymtableString(char *str, char *filename, int start)
+Py_SymtableString(const char *str, const char *filename, int start)
 {
 	node *n;
 	struct symtable *st;
@@ -1162,7 +1162,7 @@
 /* Simplified interface to parsefile -- return node or set exception */
 
 node *
-PyParser_SimpleParseFileFlags(FILE *fp, char *filename, int start, int flags)
+PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
 {
 	node *n;
 	perrdetail err;
@@ -1174,7 +1174,7 @@
 }
 
 node *
-PyParser_SimpleParseFile(FILE *fp, char *filename, int start)
+PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
 {
 	return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
 }
@@ -1182,7 +1182,7 @@
 /* Simplified interface to parsestring -- return node or set exception */
 
 node *
-PyParser_SimpleParseStringFlags(char *str, int start, int flags)
+PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
 {
 	node *n;
 	perrdetail err;
@@ -1194,13 +1194,13 @@
 }
 
 node *
-PyParser_SimpleParseString(char *str, int start)
+PyParser_SimpleParseString(const char *str, int start)
 {
 	return PyParser_SimpleParseStringFlags(str, start, 0);
 }
 
 node *
-PyParser_SimpleParseStringFlagsFilename(char *str, char *filename,
+PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
 					int start, int flags)
 {
 	node *n;
@@ -1215,7 +1215,7 @@
 }
 
 node *
-PyParser_SimpleParseStringFilename(char *str, char *filename, int start)
+PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
 {
 	return PyParser_SimpleParseStringFlagsFilename(str, filename,
 						       start, 0);
@@ -1429,7 +1429,7 @@
  *      the descriptor is NULL or "<stdin>" or "???".
  */
 int
-Py_FdIsInteractive(FILE *fp, char *filename)
+Py_FdIsInteractive(FILE *fp, const char *filename)
 {
 	if (isatty((int)fileno(fp)))
 		return 1;