diff Python/bltinmodule.c @ 27782:904f0e769820 legacy-trunk

My previous checkin caused compile() to no longer accept buffers, as noted my MAL. Fixed. (Btw. eval() still doesn't take buffers, but that was so even before my patch.)
author Just van Rossum <just@letterror.com>
date Mon, 10 Feb 2003 09:22:01 +0000
parents cc01fb654ce3
children f34446fa216e
line wrap: on
line diff
--- a/Python/bltinmodule.c	Mon Feb 10 08:21:10 2003 +0000
+++ b/Python/bltinmodule.c	Mon Feb 10 09:22:01 2003 +0000
@@ -18,6 +18,8 @@
 */
 #if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
 const char *Py_FileSystemDefaultEncoding = "mbcs";
+#elif defined(__APPLE__)
+const char *Py_FileSystemDefaultEncoding = "utf-8";
 #else
 const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
 #endif
@@ -341,6 +343,7 @@
 	int supplied_flags = 0;
 	PyCompilerFlags cf;
 	PyObject *result, *cmd, *tmp = NULL;
+	int length;
 
 	if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
 			      &startstr, &supplied_flags, &dont_inherit))
@@ -357,15 +360,14 @@
 		cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
 	}
 #endif
-	if (!PyString_Check(cmd)) {
+	if (PyObject_AsReadBuffer(cmd, (const void **)&str, &length))
+		return NULL;
+	if (length != strlen(str)) {
 		PyErr_SetString(PyExc_TypeError,
-				"compile() arg 1 must be a string");
+				"expected string without null bytes");
 		return NULL;
 	}
 
-	if (PyString_AsStringAndSize(cmd, &str, NULL))
-		return NULL;
-
 	if (strcmp(startstr, "exec") == 0)
 		start = Py_file_input;
 	else if (strcmp(startstr, "eval") == 0)