diff Python/mactoolboxglue.c @ 42163:bff9ebabfc15

Changes to ctypes and Mac toolbox glue that fix test_threading and test_platform. However, test_ctypes is still broken -- and apparently more than before.
author Guido van Rossum <guido@python.org>
date Mon, 09 Jul 2007 11:17:33 +0000
parents 654c380cf8b9
children acd1f642706f
line wrap: on
line diff
--- a/Python/mactoolboxglue.c	Mon Jul 09 10:24:45 2007 +0000
+++ b/Python/mactoolboxglue.c	Mon Jul 09 11:17:33 2007 +0000
@@ -159,12 +159,32 @@
 PyMac_GetOSType(PyObject *v, OSType *pr)
 {
 	uint32_t tmp;
-	if (!PyString_Check(v) || PyString_Size(v) != 4) {
+	const char *str;
+	int len;
+	if (PyUnicode_Check(v)) {
+		v = _PyUnicode_AsDefaultEncodedString(v, NULL);
+		if (v == NULL)
+			return 0;
+	}
+	if (PyString_Check(v)) {
+		str = PyString_AS_STRING(v);
+		len = PyString_GET_SIZE(v);
+	}
+	else if (PyBytes_Check(v)) {
+		str = PyBytes_AS_STRING(v);
+		len = PyBytes_GET_SIZE(v);
+	}
+	else {
 		PyErr_SetString(PyExc_TypeError,
-			"OSType arg must be string of 4 chars");
+			"OSType arg must be string (of 4 chars)");
 		return 0;
 	}
-	memcpy((char *)&tmp, PyString_AsString(v), 4);
+	if (len != 4) {
+		PyErr_SetString(PyExc_TypeError,
+			"OSType arg must be (string of) 4 chars");
+		return 0;
+	}
+	memcpy((char *)&tmp, str, 4);
 	*pr = (OSType)ntohl(tmp);
 	return 1;
 }