On overlapping buffers use memmove
This commit is contained in:
parent
898afbaf34
commit
02ed0ec93b
@ -323,9 +323,16 @@ Handle<Value> Buffer::Copy(const Arguments &args) {
|
|||||||
ssize_t to_copy = MIN(source_end - source_start,
|
ssize_t to_copy = MIN(source_end - source_start,
|
||||||
target->length() - target_start);
|
target->length() - target_start);
|
||||||
|
|
||||||
memcpy((void*)(target->data() + target_start),
|
if (target->blob_ == source->blob_) {
|
||||||
(const void*)(source->data() + source_start),
|
// need to use slightly slower memmove is the ranges might overlap
|
||||||
to_copy);
|
memmove((void*)(target->data() + target_start),
|
||||||
|
(const void*)(source->data() + source_start),
|
||||||
|
to_copy);
|
||||||
|
} else {
|
||||||
|
memcpy((void*)(target->data() + target_start),
|
||||||
|
(const void*)(source->data() + source_start),
|
||||||
|
to_copy);
|
||||||
|
}
|
||||||
|
|
||||||
return scope.Close(Integer::New(to_copy));
|
return scope.Close(Integer::New(to_copy));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user