Issue #7616: Fix copying of overlapping memoryview slices with the Intel

compiler.
This commit is contained in:
Antoine Pitrou 2010-07-11 12:12:00 +00:00
parent 349d558e0d
commit 1ac745b5c5
2 changed files with 6 additions and 11 deletions

View file

@ -624,7 +624,7 @@ memory_subscript(PyMemoryViewObject *self, PyObject *key)
static int
memory_ass_sub(PyMemoryViewObject *self, PyObject *key, PyObject *value)
{
Py_ssize_t start, len, bytelen, i;
Py_ssize_t start, len, bytelen;
Py_buffer srcview;
Py_buffer *view = &(self->view);
char *srcbuf, *destbuf;
@ -694,16 +694,8 @@ memory_ass_sub(PyMemoryViewObject *self, PyObject *key, PyObject *value)
if (destbuf + bytelen < srcbuf || srcbuf + bytelen < destbuf)
/* No overlapping */
memcpy(destbuf, srcbuf, bytelen);
else if (destbuf < srcbuf) {
/* Copy in ascending order */
for (i = 0; i < bytelen; i++)
destbuf[i] = srcbuf[i];
}
else {
/* Copy in descencing order */
for (i = bytelen - 1; i >= 0; i--)
destbuf[i] = srcbuf[i];
}
else
memmove(destbuf, srcbuf, bytelen);
PyBuffer_Release(&srcview);
return 0;