summaryrefslogtreecommitdiff
path: root/numpy/core/src/multiarray/arraytypes.c.src
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/src/multiarray/arraytypes.c.src')
-rw-r--r--numpy/core/src/multiarray/arraytypes.c.src19
1 files changed, 17 insertions, 2 deletions
diff --git a/numpy/core/src/multiarray/arraytypes.c.src b/numpy/core/src/multiarray/arraytypes.c.src
index e8aa19416..5e6804a5c 100644
--- a/numpy/core/src/multiarray/arraytypes.c.src
+++ b/numpy/core/src/multiarray/arraytypes.c.src
@@ -998,11 +998,25 @@ VOID_setitem(PyObject *op, void *input, void *vap)
* undiscerning case: It interprets any object as a buffer
* and reads as many bytes as possible, padding with 0.
*/
+#if defined(NPY_PY3K)
+ {
+ Py_buffer view;
+
+ if (PyObject_GetBuffer(op, &view, PyBUF_SIMPLE) < 0) {
+ return -1;
+ }
+ memcpy(ip, view.buf, PyArray_MIN(view.len, itemsize));
+ if (itemsize > view.len) {
+ memset(ip + view.len, 0, itemsize - view.len);
+ }
+ PyBuffer_Release(&view);
+ }
+#else
{
const void *buffer;
Py_ssize_t buflen;
- res = PyObject_AsReadBuffer(op, &buffer, &buflen);
- if (res == -1) {
+
+ if (PyObject_AsReadBuffer(op, &buffer, &buflen) < 0) {
return -1;
}
memcpy(ip, buffer, PyArray_MIN(buflen, itemsize));
@@ -1010,6 +1024,7 @@ VOID_setitem(PyObject *op, void *input, void *vap)
memset(ip + buflen, 0, itemsize - buflen);
}
}
+#endif
return 0;
}