[Python-3000-checkins] r57178 - in python/branches/py3k-buffer: Modules/arraymodule.c Modules/mmapmodule.c Objects/bufferobject.c Objects/bytesobject.c

travis.oliphant python-3000-checkins at python.org
Sat Aug 18 11:41:33 CEST 2007


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)


More information about the Python-3000-checkins mailing list