From 70a237179f1213b0c180898b6e1f0b6c4e9cd11c Mon Sep 17 00:00:00 2001 From: Alexandre Vassalotti Date: Sun, 14 Oct 2007 02:05:51 +0000 Subject: [PATCH] Remove the buffer API from PyUnicode as specified by PEP 3137. Also, fix the error message of the 't' format unit, in getargs.c, so that it asks for bytes, instead of string. --- Modules/_sre.c | 9 +++++++++ Modules/posixmodule.c | 3 ++- Objects/unicodeobject.c | 16 +--------------- Python/getargs.c | 2 +- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/Modules/_sre.c b/Modules/_sre.c index 18686577e4..f4cd1feffa 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 75ce9914ac..2fe2b6396c 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 73aeec4ab4..def9011d3b 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 de9cc93afa..4bcc1757b6 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) -- 2.40.0