summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/_sre.c9
-rw-r--r--Modules/posixmodule.c3
-rw-r--r--Objects/unicodeobject.c16
-rw-r--r--Python/getargs.c2
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)