Author: travis.oliphant
Date: Sat Aug 18 11:41:32 2007
New Revision: 57178

Modified:
   python/branches/py3k-buffer/Modules/arraymodule.c
   python/branches/py3k-buffer/Modules/mmapmodule.c
   python/branches/py3k-buffer/Objects/bufferobject.c
   python/branches/py3k-buffer/Objects/bytesobject.c
Log:
Fix more failing tests for py3k-buffer branch: types, array, mmap

Modified: python/branches/py3k-buffer/Modules/arraymodule.c
==============================================================================
--- python/branches/py3k-buffer/Modules/arraymodule.c   (original)
+++ python/branches/py3k-buffer/Modules/arraymodule.c   Sat Aug 18 11:41:32 2007
@@ -1736,10 +1736,17 @@
        (objobjargproc)array_ass_subscr
 };
 
+static const void *emptybuf = "";
+
 
 static int
 array_buffer_getbuf(arrayobject *self, PyBuffer *view, int flags)
 {
+        if ((flags & PyBUF_CHARACTER)) {
+                PyErr_SetString(PyExc_TypeError,
+                                "Cannot be a character buffer");
+                return -1;
+        }
         if ((flags & PyBUF_LOCKDATA)) {
                 PyErr_SetString(PyExc_BufferError,
                                 "Cannot lock data");
@@ -1748,6 +1755,8 @@
         if (view==NULL) goto finish;
 
         view->buf = (void *)self->ob_item;
+        if (view->buf == NULL)
+                view->buf = (void *)emptybuf;
         view->len = (Py_Size(self)) * self->ob_descr->itemsize;
         view->readonly = 0;
         view->ndim = 1;

Modified: python/branches/py3k-buffer/Modules/mmapmodule.c
==============================================================================
--- python/branches/py3k-buffer/Modules/mmapmodule.c    (original)
+++ python/branches/py3k-buffer/Modules/mmapmodule.c    Sat Aug 18 11:41:32 2007
@@ -877,6 +877,7 @@
        m_obj->data = NULL;
        m_obj->size = (size_t) map_size;
        m_obj->pos = (size_t) 0;
+       m_obj->exports = 0;
        if (fd == -1) {
                m_obj->fd = -1;
                /* Assume the caller wants to map anonymous memory.
@@ -1046,6 +1047,7 @@
        /* set the initial position */
        m_obj->pos = (size_t) 0;
 
+       m_obj->exports = 0;
        /* set the tag name */
        if (tagname != NULL && *tagname != '\0') {
                m_obj->tagname = PyMem_Malloc(strlen(tagname)+1);

Modified: python/branches/py3k-buffer/Objects/bufferobject.c
==============================================================================
--- python/branches/py3k-buffer/Objects/bufferobject.c  (original)
+++ python/branches/py3k-buffer/Objects/bufferobject.c  Sat Aug 18 11:41:32 2007
@@ -50,7 +50,7 @@
         if (view == NULL) return 0;
         if (!get_buf(self, view, flags))
                 return -1;
-        return PyBuffer_FillInfo(view, view->buf, view->len, view->readonly, 
flags);
+        return PyBuffer_FillInfo(view, view->buf, view->len, self->b_readonly, 
flags);
 }
 
 
@@ -259,7 +259,7 @@
        if (!get_bufx(self, &v1, PyBUF_SIMPLE))
                ok = 0;
        if (!get_bufx(other, &v2, PyBUF_SIMPLE)) {
-                if (ok) PyObject_ReleaseBuffer(self, &v1);
+                if (ok) PyObject_ReleaseBuffer((PyObject *)self, &v1);
                ok = 0;
         }
        if (!ok) {
@@ -285,7 +285,7 @@
        if (cmp == 0)
                cmp = (len1 < len2) ? -1 :
                      (len1 > len2) ? 1 : 0;
-        PyObject_ReleaseBuffer(self, &v1);
+        PyObject_ReleaseBuffer((PyObject *)self, &v1);
         PyObject_ReleaseBuffer(other, &v2);
        return Py_CmpToRich(op, cmp);
 }
@@ -324,10 +324,10 @@
 
         if (!get_buf(self, &view, PyBUF_SIMPLE))
                return -1;
-        if (!(view.readonly)) {
+        if (!(self->b_readonly)) {
                 PyErr_SetString(PyExc_TypeError,
                                 "writable buffers are not hashable");
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                return -1;
        }
                 
@@ -340,7 +340,7 @@
        if (x == -1)
                x = -2;
        self->b_hash = x;
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
        return x;
 }
 
@@ -353,7 +353,7 @@
        if (!get_buf(self, &view, PyBUF_SIMPLE))
                return NULL;
        res = PyString_FromStringAndSize((const char *)view.buf, view.len);
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
         return res;
 }
 
@@ -366,7 +366,7 @@
 
        if (!get_buf(self, &view, PyBUF_SIMPLE))
                return -1;
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
        return view.len;
 }
 
@@ -391,19 +391,19 @@
        /* optimize special case */
         /* XXX bad idea type-wise */
        if ( view.len == 0 ) {
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                 Py_INCREF(other);
                 return other;
        }
 
         if (PyObject_GetBuffer((PyObject *)other, &view2, PyBUF_SIMPLE) < 0) {
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                 return NULL;
         }
 
        ob = PyBytes_FromStringAndSize(NULL, view.len+view2.len);
        if ( ob == NULL ) {
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                 PyObject_ReleaseBuffer(other, &view2);
                return NULL;
         }
@@ -411,7 +411,7 @@
        memcpy(p, view.buf, view.len);
        memcpy(p + view.len, view2.buf, view2.len);
 
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
         PyObject_ReleaseBuffer(other, &view2);
         return ob;
 }
@@ -438,7 +438,7 @@
            p += view.len;
        }
 
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
        return ob;
 }
 
@@ -455,7 +455,7 @@
                return NULL;
        }
        ob = PyBytes_FromStringAndSize((char *)view.buf + idx, 1);
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
         return ob;
 }
 
@@ -476,7 +476,7 @@
                right = left;
        ob = PyBytes_FromStringAndSize((char *)view.buf + left,
                                        right - left);
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
         return ob;
 }
 
@@ -492,12 +492,12 @@
        if ( self->b_readonly || view.readonly ) {
                PyErr_SetString(PyExc_TypeError,
                                "buffer is read-only");
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                return -1;
        }
 
        if (idx < 0 || idx >= view.len) {
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                PyErr_SetString(PyExc_IndexError,
                                "buffer assignment index out of range");
                return -1;
@@ -507,16 +507,16 @@
        if ( pb == NULL ||
             pb->bf_getbuffer == NULL) {
                PyErr_BadArgument();
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                return -1;
        }
         
         if (PyObject_GetBuffer(other, &view2, PyBUF_SIMPLE) < 0) {
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                 return -1;
         }
        if ( view.len != 1 ) {
-                PyObject_ReleaseBuffer(self->b_base, &view);
+                PyObject_ReleaseBuffer((PyObject *)self, &view);
                 PyObject_ReleaseBuffer(other, &view2);
                PyErr_SetString(PyExc_TypeError,
                                "right operand must be a single byte");
@@ -524,7 +524,7 @@
        }
 
        ((char *)(view.buf))[idx] = *((char *)(view2.buf));
-        PyObject_ReleaseBuffer(self->b_base, &view);
+        PyObject_ReleaseBuffer((PyObject *)self, &view);
         PyObject_ReleaseBuffer(other, &view2);
        return 0;
 }
@@ -549,12 +549,12 @@
        if ( self->b_readonly || v1.readonly) {
                PyErr_SetString(PyExc_TypeError,
                                "buffer is read-only");
-                PyObject_ReleaseBuffer(self->b_base, &v1);
+                PyObject_ReleaseBuffer((PyObject *)self, &v1);
                return -1;
        }
 
         if ((*pb->bf_getbuffer)(other, &v2, PyBUF_SIMPLE) < 0) {
-                PyObject_ReleaseBuffer(self->b_base, &v1);
+                PyObject_ReleaseBuffer((PyObject *)self, &v1);
                 return -1;
         }
 
@@ -572,7 +572,7 @@
                PyErr_SetString(
                        PyExc_TypeError,
                        "right operand length must match slice length");
-                PyObject_ReleaseBuffer(self->b_base, &v1);
+                PyObject_ReleaseBuffer((PyObject *)self, &v1);
                 PyObject_ReleaseBuffer(other, &v2);
                return -1;
        }
@@ -580,7 +580,7 @@
        if ( slice_len )
            memcpy((char *)v1.buf + left, v2.buf, slice_len);
 
-        PyObject_ReleaseBuffer(self->b_base, &v1);
+        PyObject_ReleaseBuffer((PyObject *)self, &v1);
         PyObject_ReleaseBuffer(other, &v2);        
        return 0;
 }

Modified: python/branches/py3k-buffer/Objects/bytesobject.c
==============================================================================
--- python/branches/py3k-buffer/Objects/bytesobject.c   (original)
+++ python/branches/py3k-buffer/Objects/bytesobject.c   Sat Aug 18 11:41:32 2007
@@ -804,13 +804,8 @@
     if (PyObject_CheckBuffer(arg)) {
         Py_ssize_t size;
         PyBuffer view;
-        if (PyObject_GetBuffer(arg, &view, PyBUF_FULL) < 0)
+        if (PyObject_GetBuffer(arg, &view, PyBUF_FULL_RO) < 0)
             return -1;
-        if (view.readonly == 1) {
-                PyErr_SetString(PyExc_BufferError,
-                                "Cannot create a mutable bytes object");
-                goto fail;
-        }
         size = view.len;
         if (PyBytes_Resize((PyObject *)self, size) < 0) goto fail;
         if (PyBuffer_ToContiguous(self->ob_bytes, &view, size, 'C') < 0)
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins

Reply via email to