diff Python/mactoolboxglue.c @ 42170:acd1f642706f

Make test_urllib.py pass. Mostly str/bytes issues. Also fix mac toolbox glue to accept str, str8, bytes for 255-byte strings.
author Guido van Rossum <guido@python.org>
date Tue, 10 Jul 2007 08:30:03 +0000
parents bff9ebabfc15
children 278c52134140
line wrap: on
line diff
--- a/Python/mactoolboxglue.c	Tue Jul 10 07:29:12 2007 +0000
+++ b/Python/mactoolboxglue.c	Tue Jul 10 08:30:03 2007 +0000
@@ -209,14 +209,29 @@
 int
 PyMac_GetStr255(PyObject *v, Str255 pbuf)
 {
-	int len;
-	if (!PyString_Check(v) || (len = PyString_Size(v)) > 255) {
+	char *ptr;
+	Py_ssize_t len = 1000;
+
+	if (PyUnicode_Check(v)) {
+		v = _PyUnicode_AsDefaultEncodedString(v, NULL);
+		if (v == NULL)
+			return NULL;
+	}
+	if (PyString_Check(v)) {
+		ptr = PyString_AS_STRING(v);
+		len = PyString_GET_SIZE(v);
+	}
+	else if (PyBytes_Check(v)) {
+		ptr = PyBytes_AS_STRING(v);
+		len = PyBytes_GET_SIZE(v);
+	}
+	if (len > 255) {
 		PyErr_SetString(PyExc_TypeError,
-			"Str255 arg must be string of at most 255 chars");
+			"Str255 arg must be string/bytes of at most 255 chars");
 		return 0;
 	}
 	pbuf[0] = len;
-	memcpy((char *)(pbuf+1), PyString_AsString(v), len);
+	memcpy((char *)(pbuf+1), ptr, len);
 	return 1;
 }