Mercurial > cpython-lru_cache-weakref
diff Modules/_ctypes/cfield.c @ 42257:c280647c330c
c_char, c_char_p objects and c_char array structure fields return
their value now as str, no longer str8.
| author | Thomas Heller <theller@ctypes.org> |
|---|---|
| date | Fri, 13 Jul 2007 12:52:51 +0000 |
| parents | 17bb3980483e |
| children | e70cdce0e8b2 |
line wrap: on
line diff
--- a/Modules/_ctypes/cfield.c Fri Jul 13 12:07:59 2007 +0000 +++ b/Modules/_ctypes/cfield.c Fri Jul 13 12:52:51 2007 +0000 @@ -1137,9 +1137,7 @@ return NULL; if (PyBytes_GET_SIZE(value) != 1) { Py_DECREF(value); - PyErr_Format(PyExc_TypeError, - "one character string expected"); - return NULL; + goto error; } *(char *)ptr = PyBytes_AsString(value)[0]; Py_DECREF(value); @@ -1149,22 +1147,17 @@ *(char *)ptr = PyBytes_AsString(value)[0]; _RET(value); } - /* XXX struni remove later */ - if (!PyString_Check(value) || (1 != PyString_Size(value))) { - PyErr_Format(PyExc_TypeError, - "one character string expected"); - return NULL; - } - *(char *)ptr = PyString_AS_STRING(value)[0]; - _RET(value); + error: + PyErr_Format(PyExc_TypeError, + "one character string expected"); + return NULL; } static PyObject * c_get(void *ptr, Py_ssize_t size) { - /* XXX struni return PyBytes (or PyUnicode?) later */ - return PyString_FromStringAndSize((char *)ptr, 1); + return PyUnicode_FromStringAndSize((char *)ptr, 1); } #ifdef CTYPES_UNICODE @@ -1280,24 +1273,16 @@ static PyObject * s_get(void *ptr, Py_ssize_t size) { - PyObject *result; - size_t slen; + Py_ssize_t i; + char *p; - result = PyString_FromString((char *)ptr); - if (!result) - return NULL; - /* chop off at the first NUL character, if any. - * On error, result will be deallocated and set to NULL. - */ - slen = strlen(PyString_AS_STRING(result)); - size = min(size, (Py_ssize_t)slen); - if (result->ob_refcnt == 1) { - /* shorten the result */ - _PyString_Resize(&result, size); - return result; - } else - /* cannot shorten the result */ - return PyString_FromStringAndSize(ptr, size); + p = (char *)ptr; + for (i = 0; i < size; ++i) { + if (*p++ == '\0') + break; + } + + return PyUnicode_FromStringAndSize((char *)ptr, (Py_ssize_t)i); } static PyObject * @@ -1393,7 +1378,7 @@ return NULL; } #endif - return PyString_FromString(*(char **)ptr); + return PyUnicode_FromString(*(char **)ptr); } else { Py_INCREF(Py_None); return Py_None;
