[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