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.
This commit is contained in:
Alexandre Vassalotti 2007-10-14 02:05:51 +00:00
parent 659e7f44e2
commit 70a237179f
4 changed files with 13 additions and 17 deletions

View File

@ -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;

View File

@ -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");

View File

@ -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 */

View File

@ -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)