Mercurial > cpython-lru_cache-weakref
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; }
