/* Otherwise a more elaborate scheme is needed */
+ /* XXX(nnorwitz): need to check for overflow! */
indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
if (indices == NULL) {
PyErr_NoMemory();
/* Otherwise a more elaborate scheme is needed */
+ /* XXX(nnorwitz): need to check for overflow! */
indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim));
if (indices == NULL) {
PyErr_NoMemory();
/* Otherwise a more elaborate copy scheme is needed */
+ /* XXX(nnorwitz): need to check for overflow! */
indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*view_src.ndim);
if (indices == NULL) {
PyErr_NoMemory();
}
elements = 1;
for (k=0; k<view_src.ndim; k++) {
+ /* XXX(nnorwitz): can this overflow? */
elements *= view_src.shape[k];
}
while (elements--) {
(*bp->bf_releasebuffer)(self->b_base, view);
}
}
- return;
+ /* XXX(nnorwitz): do we need to release view here? it leaks. */
}
static PyObject *
return NULL;
}
+ /* XXX(nnorwitz): need to check for overflow! */
ob = PyBytes_FromStringAndSize(NULL, view.len+view2.len);
if ( ob == NULL ) {
PyObject_ReleaseBuffer((PyObject *)self, &view);
count = 0;
if (!get_buf(self, &view, PyBUF_SIMPLE))
return NULL;
+ /* XXX(nnorwitz): need to check for overflow! */
ob = PyBytes_FromStringAndSize(NULL, view.len * count);
if ( ob == NULL )
return NULL;
right = view.len;
if ( right < left )
right = left;
+ /* XXX(nnorwitz): is it possible to access unitialized memory? */
ob = PyBytes_FromStringAndSize((char *)view.buf + left,
right - left);
PyObject_ReleaseBuffer((PyObject *)self, &view);
PyObject *
PyMemoryView_FromMemory(PyBuffer *info)
{
+ /* XXX(nnorwitz): need to implement something here? */
return NULL;
}
memory_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
{
PyObject *obj;
- if (!PyArg_ParseTuple(args, "O", &obj)) return NULL;
+ if (!PyArg_UnpackTuple(args, "memoryview", 1, 1, &obj)) return NULL;
return PyMemoryView_FromObject(obj);
}
void (*func)(int, Py_ssize_t *, Py_ssize_t *);
+ /* XXX(nnorwitz): need to check for overflow! */
indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*view->ndim);
if (indices == NULL) {
PyErr_NoMemory();
/* return a shadowed memory-view object */
view->buf = dest;
mem->base = PyTuple_Pack(2, obj, bytes);
+ /* XXX(nnorwitz): need to verify alloc was successful. */
Py_DECREF(bytes);
}
else {
static PyObject *
-memory_tobytes(PyMemoryViewObject *mem, PyObject *args)
+memory_tobytes(PyMemoryViewObject *mem, PyObject *noargs)
{
- if (!PyArg_ParseTuple(args, "")) return NULL;
/* Create new Bytes object for data */
return PyBytes_FromObject((PyObject *)mem);
}
static PyObject *
-memory_tolist(PyMemoryViewObject *mem, PyObject *args)
+memory_tolist(PyMemoryViewObject *mem, PyObject *noargs)
{
- if (!PyArg_ParseTuple(args, "")) return NULL;
Py_INCREF(Py_NotImplemented);
return Py_NotImplemented;
}
static PyMethodDef memory_methods[] = {
- {"tobytes", (PyCFunction)memory_tobytes, 1, NULL},
- {"tolist", (PyCFunction)memory_tolist, 1, NULL},
+ {"tobytes", (PyCFunction)memory_tobytes, METH_NOARGS, NULL},
+ {"tolist", (PyCFunction)memory_tolist, METH_NOARGS, NULL},
{NULL, NULL} /* sentinel */
};
static void
memory_dealloc(PyMemoryViewObject *self)
{
-
if (PyTuple_Check(self->base)) {
/* Special case when first element is generic object
with buffer interface and the second element is a
else {
PyObject_ReleaseBuffer(self->base, &(self->view));
}
- Py_DECREF(self->base);
+ Py_CLEAR(self->base);
PyObject_DEL(self);
}
static PyObject *
memory_repr(PyMemoryViewObject *self)
{
-
- if ( self->base == NULL )
- return PyUnicode_FromFormat("<memory at %p>",
- self);
+ /* XXX(nnorwitz): the code should be different or remove condition. */
+ if (self->base == NULL)
+ return PyUnicode_FromFormat("<memory at %p>", self);
else
- return PyUnicode_FromFormat(
- "<memory at %p>",
- self);
+ return PyUnicode_FromFormat("<memory at %p>", self);
}