Example #1
0
PyObject *memory_as_pybuffer(void *ptr, Py_ssize_t buf_len, int readonly) {
    Py_buffer pybuf;
    Py_ssize_t shape[] = {buf_len};
    int ret;
    if (readonly)
    	ret = PyBuffer_FillInfo(&pybuf, NULL, ptr, buf_len, 0, PyBUF_SIMPLE);
    else
        ret = PyBuffer_FillInfo(&pybuf, NULL, ptr, buf_len, 0, PyBUF_WRITABLE);
    if (ret!=0)
    	return NULL;
    pybuf.format = "B";
    pybuf.shape = shape;
    return PyMemoryView_FromBuffer(&pybuf);
}
Example #2
0
File: blob.c Project: ipmcc/pygit2
static int
Blob_getbuffer(Blob *self, Py_buffer *view, int flags)
{
    return PyBuffer_FillInfo(view, (PyObject *) self,
                             (void *) git_blob_rawcontent(self->blob),
                             git_blob_rawsize(self->blob), 1, flags);
}
Example #3
0
static int
asciistr_getbuffer(PyObject *exporter, Py_buffer *view, int flags)
{

    return (PyBuffer_FillInfo(view, exporter, PyUnicode_DATA(exporter),
        PyUnicode_GET_LENGTH(exporter), 1, flags));
}
Example #4
0
static int Image_getbuffer(PyImage *self, Py_buffer *view, int flags)
{
	unsigned int * image;
	int ret;

	try {
		// can throw in case of resize
		image = self->m_image->getImage();
	}
	catch (Exception & exp) {
		exp.report();
		return -1;
	}

	if (!image) {
		PyErr_SetString(PyExc_BufferError, "Image buffer is not available");
		return -1;
	}
	if (view == NULL)
	{
		self->m_image->m_exports++;
		return 0;
	}
	ret = PyBuffer_FillInfo(view, (PyObject *)self, image, self->m_image->getBuffSize(), 0, flags);
	if (ret >= 0)
		self->m_image->m_exports++;
	return ret;
}
Example #5
0
static int PyPointlessVector_getbuffer(PyPointlessVector* self, Py_buffer* view, int flags)
{
	if (view == 0)
		return 0;

	void* ptr = pointless_prim_vector_base_ptr(self);
	return PyBuffer_FillInfo(view, (PyObject*)self, ptr, pointless_vector_n_bytes(self), 0, flags);
}
Example #6
0
static int Image_getbuffer(PyImage *self, Py_buffer *view, int flags)
{
	unsigned int * image;
	int ret;

	try
	{
		// can throw in case of resize
		image = self->m_image->getImage();
	}
	catch (Exception & exp)
	{
		// cannot return -1, this creates a crash in Python, for now we will just return an empty buffer
		exp.report();
		//return -1;
		goto error;
	}

	if (!image)
	{
		// same remark, see above
		//PyErr_SetString(PyExc_BufferError, "Image buffer is not available");
		//return -1;
		goto error;
	}
	if (view == NULL)
	{
		self->m_image->m_exports++;
		return 0;
	}
	ret = PyBuffer_FillInfo(view, (PyObject *)self, image, self->m_image->getBuffSize(), 0, flags);
	if (ret >= 0)
		self->m_image->m_exports++;
	return ret;

error:
	// Return a empty buffer to avoid a crash in Python 3.1
	// The bug is fixed in Python SVN 77916, as soon as the python revision used by Blender is
	// updated, you can simply return -1 and set the error
	static char* buf = (char *)"";
	ret = PyBuffer_FillInfo(view, (PyObject *)self, buf, 0, 0, flags);
	if (ret >= 0)
		self->m_image->m_exports++;
	return ret;
	
}
static int buffer_getbuffer(PyBufferObject *self, Py_buffer *buf, int flags)
{
    void *ptr;
    Py_ssize_t size;
    if (!get_buf(self, &ptr, &size, ANY_BUFFER))
        return -1;
    return PyBuffer_FillInfo(buf, (PyObject*)self, ptr, size,
                             self->b_readonly, flags);
}
Example #8
0
static int
stolenbuf_getbuffer(stolenbufobject *self, Py_buffer *view, int flags)
{
    return PyBuffer_FillInfo(view,
                             (PyObject*) self,
                             (void*) PyString_AS_STRING(self->invalid_bytes),
                             PyString_GET_SIZE(self->invalid_bytes),
                             0,  /* not readonly */
                             flags);
}
Example #9
0
static int
mmap_buffer_getbuf(mmap_object *self, Py_buffer *view, int flags)
{
    CHECK_VALID(-1);
    if (PyBuffer_FillInfo(view, (PyObject*)self, self->data, self->size,
                          (self->access == ACCESS_READ), flags) < 0)
        return -1;
    self->exports++;
    return 0;
}
/* 3.0 buffer interface */
int chunk_getbuffer(PyObject *_self, Py_buffer *view, int flags)
{
    int rv;
    chunkObject *self = (chunkObject*)_self;
    rv = PyBuffer_FillInfo(view, _self, self->base, self->len, 1, flags);
    if (rv == 0) {
        view->format = "c";
    }
    return rv;
}
Example #11
0
File: voidptr.c Project: Werkov/SIP
/*
 * The buffer implementation for Python v2.6 and later.
 */
static int sipVoidPtr_getbuffer(PyObject *self, Py_buffer *buf, int flags)
{
    sipVoidPtrObject *v;

    if (check_size(self) < 0)
        return -1;

    v = (sipVoidPtrObject *)self;

    return PyBuffer_FillInfo(buf, self, v->voidptr, v->size, !v->rw, flags);
}
Example #12
0
PyObject *
PyBuffer_FromMemory(void *data, Py_ssize_t len)
{
    Py_buffer buffer;
    PyObject *mv;

    PyBuffer_FillInfo(&buffer, NULL, data, len, 1, PyBUF_CONTIG_RO);
    mv = PyMemoryView_FromBuffer(&buffer);
    PyBuffer_Release(&buffer);
    return mv;
}
Example #13
0
int MemInfo_getbuffer(PyObject *exporter, Py_buffer *view, int flags) {
    Py_ssize_t len;
    void *buf;
    int readonly = 0;

    MemInfoObject *miobj = (MemInfoObject*)exporter;
    MemInfo *mi = miobj->meminfo;

    buf = NRT_MemInfo_data(mi);
    len = NRT_MemInfo_size(mi);
    return PyBuffer_FillInfo(view, exporter, buf, len, readonly, flags);
}
Example #14
0
    static int
    MemAllocObject_getbufferproc(PyObject *self, Py_buffer *view, int flags)
    {
        Py_ssize_t size = 0;
        void *ptr = 0;
        int readonly;

        if(-1 == get_bufinfo(self, &size, &ptr))
            return -1;

        readonly = (PyBUF_WRITABLE & flags) != PyBUF_WRITABLE;

        /* fill buffer */
        if (-1 == PyBuffer_FillInfo(view, self, (void*)ptr, size, readonly, flags))
            return -1;

        return 0;
    }
 PyObject* make_mview(const TCPStream::payload_type& payload) {
     // make a python memoryview corresponding to the vector<uint8_t> payload
     const uint8_t* buf = &(payload[0]);
     size_t buf_size = payload.size();
     Py_buffer* viewinfo = (Py_buffer*) PyMem_Malloc(sizeof(Py_buffer));
     if (viewinfo == 0) {
         throw std::bad_alloc();     // malloc error
     }
     if (PyBuffer_FillInfo(viewinfo, 0, (void*) buf, (Py_ssize_t) buf_size, 1, PyBUF_FULL_RO) != 0) {
         PyMem_Free((void*) viewinfo);
         throw std::runtime_error("PyBuffer_FillInfo failed in TCPStreamPyFunctor::make_mview");
     }
     PyObject* mview = PyMemoryView_FromBuffer(viewinfo);       // new reference
     if (mview == 0) {
         PyMem_Free((void*) viewinfo);
         throw std::runtime_error("PyMemoryView_FromBuffer failed in TCPStreamPyFunctor::make_mview");
     }
     return mview;
 }
Example #16
0
static int BPy_IDArray_getbuffer(BPy_IDArray *self, Py_buffer *view, int flags)
{
	IDProperty *prop = self->prop;
	int itemsize = itemsize_by_idarray_type(prop->subtype);
	int length = itemsize * prop->len;

	if (PyBuffer_FillInfo(view, (PyObject *)self, IDP_Array(prop), length, false, flags) == -1) {
		return -1;
	}

	view->itemsize = itemsize;
	view->format = (char *)idp_format_from_array_type(prop->subtype);

	Py_ssize_t *shape = MEM_mallocN(sizeof(Py_ssize_t), __func__);
	shape[0] = prop->len;
	view->shape = shape;

	return 0;
}
Example #17
0
static int get_buffer(PyObject* obj, Py_buffer *buf, int force)
{
    Py_buffer read_buf;
    int flags = PyBUF_ND|PyBUF_STRIDES|PyBUF_FORMAT;
    int ret;

    /* Attempt to get a writable buffer */
    if (!PyObject_GetBuffer(obj, buf, flags|PyBUF_WRITABLE))
        return 0;
    if (!force)
        return -1;

    /* Make a writable buffer from a read-only buffer */
    PyErr_Clear();
    if(-1 == PyObject_GetBuffer(obj, &read_buf, flags))
        return -1;
    ret = PyBuffer_FillInfo(buf, NULL, read_buf.buf, read_buf.len, 0,
                             flags|PyBUF_WRITABLE);
    PyBuffer_Release(&read_buf);
    return ret;
}