musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
path: root/src/string/memmove.c
AgeCommit message (Collapse)AuthorLines
2018年09月26日fix aliasing-based undefined behavior in string functions Rich Felker-1/+7
use the GNU C may_alias attribute if available, and fallback to naive byte-by-byte loops if __GNUC__ is not defined. this patch has been written to minimize changes so that history remains reviewable; it does not attempt to bring the affected code into a more consistent or elegant form.
2018年09月23日fix undefined pointer comparison in memmove Rich Felker-1/+1
the comparison must take place in the address space model as an integer type, since comparing pointers that are not pointing into the same array is undefined. the subsequent d<s comparison however is valid, because it's only reached in the case where the source and dest overlap, in which case they are necessarily pointing to parts of the same array. to make the comparison, use an unsigned range check for dist(s,d)>=n, algebraically !(-n<s-d<n). subtracting n yields !(-2*n<s-d-n<0), which mapped into unsigned modular arithmetic is !(-2*n<s-d-n) or rather -2*n>=s-d-n.
2012年09月10日reenable word-at-at-time copying in memmove Rich Felker-4/+27
before restrict was added, memove called memcpy for forward copies and used a byte-at-a-time loop for reverse copies. this was changed to avoid invoking UB now that memcpy has an undefined copying order, making memmove considerably slower. performance is still rather bad, so I'll be adding asm soon.
2012年09月06日remove dependency of memmove on memcpy direction Rich Felker-5/+4
this commit introduces a performance regression in many uses of memmove, which will need to be addressed before the next release. i'm making it as a temporary measure so that the restrict patch can be committed without invoking undefined behavior when memmove calls memcpy with overlapping regions.
2011年02月12日initial check-in, version 0.5.0 v0.5.0 Rich Felker-0/+14
generated by cgit v1.2.1 (git 2.18.0) at 2025年09月11日 03:13:33 +0000

AltStyle によって変換されたページ (->オリジナル) /