diff options
-rw-r--r-- | Modules/_sre.c | 9 | ||||
-rw-r--r-- | Modules/posixmodule.c | 3 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 16 | ||||
-rw-r--r-- | Python/getargs.c | 2 |
4 files changed, 13 insertions, 17 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c index 1868657..f4cd1fe 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -1674,6 +1674,15 @@ getstring(PyObject* string, Py_ssize_t* p_length, int* p_charsize) void* ptr; Py_buffer view; + /* Unicode objects do not support the buffer API. So, get the data + directly instead. */ + if (PyUnicode_Check(string)) { + ptr = (void *)PyUnicode_AS_DATA(string); + *p_length = PyUnicode_GET_SIZE(string); + *p_charsize = sizeof(Py_UNICODE); + return ptr; + } + /* get pointer to string buffer */ view.len = -1; buffer = Py_Type(string)->tp_as_buffer; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 75ce991..2fe2b63 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2135,7 +2135,8 @@ posix_listdir(PyObject *self, PyObject *args) FILEFINDBUF3 ep; APIRET rc; - if (!PyArg_ParseTuple(args, "t#:listdir", &name, &len)) + if (!PyArg_ParseTuple(args, "et#:listdir", + Py_FileSystemDefaultEncoding, &name, &len)) return NULL; if (len >= MAX_PATH) { PyErr_SetString(PyExc_ValueError, "path too long"); diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 73aeec4..def9011 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -8113,15 +8113,6 @@ static PyMappingMethods unicode_as_mapping = { }; -static int -unicode_buffer_getbuffer(PyUnicodeObject *self, Py_buffer *view, int flags) -{ - - return PyBuffer_FillInfo(view, (void *)self->str, - PyUnicode_GET_DATA_SIZE(self), 1, flags); -} - - /* Helpers for PyUnicode_Format() */ static PyObject * @@ -8815,11 +8806,6 @@ PyObject *PyUnicode_Format(PyObject *format, return NULL; } -static PyBufferProcs unicode_as_buffer = { - (getbufferproc) unicode_buffer_getbuffer, - NULL, -}; - static PyObject * unicode_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds); @@ -8903,7 +8889,7 @@ PyTypeObject PyUnicode_Type = { (reprfunc) unicode_str, /* tp_str */ PyObject_GenericGetAttr, /* tp_getattro */ 0, /* tp_setattro */ - &unicode_as_buffer, /* tp_as_buffer */ + 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_UNICODE_SUBCLASS, /* tp_flags */ unicode_doc, /* tp_doc */ diff --git a/Python/getargs.c b/Python/getargs.c index de9cc93..4bcc175 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -1252,7 +1252,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, arg, msgbuf, bufsize); if (pb == NULL || pb->bf_getbuffer == NULL) return converterr( - "string or read-only character buffer", + "bytes or read-only character buffer", arg, msgbuf, bufsize); if ((*pb->bf_getbuffer)(arg, &view, PyBUF_SIMPLE) != 0) |