]> granicus.if.org Git - python/commitdiff
Remove the buffer API from PyUnicode as specified by PEP 3137. Also,
authorAlexandre Vassalotti <alexandre@peadrop.com>
Sun, 14 Oct 2007 02:05:51 +0000 (02:05 +0000)
committerAlexandre Vassalotti <alexandre@peadrop.com>
Sun, 14 Oct 2007 02:05:51 +0000 (02:05 +0000)
fix the error message of the 't' format unit, in getargs.c, so that it
asks for bytes, instead of string.

Modules/_sre.c
Modules/posixmodule.c
Objects/unicodeobject.c
Python/getargs.c

index 18686577e412872eed091a38f74e97d49b1c8529..f4cd1feffac9155cd6cadd36245e3c62530364f6 100644 (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;
index 75ce9914ac6b219a392a7dc285c05024f9db1fd0..2fe2b6396cac67c8d28ec6c8c96d354e7881e5ee 100644 (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");
index 73aeec4ab4bf1043248bf68984ae6d14c0cd7c1c..def9011d3baa784ee1a9eae64990e6aff5bd31ed 100644 (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 */
index de9cc93afacf9d5e28c4335cc31d0f393281b7d9..4bcc1757b65ceeb3017855d1ede01a38822fda76 100644 (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)