Unify memset usage across platforms and core:c/libc

This commit is contained in:
gingerBill
2021-09-10 15:59:14 +01:00
parent c519ab9401
commit 12af657369
7 changed files with 4 additions and 174 deletions
-53
View File
@@ -26,56 +26,3 @@ windows_trap_type_assertion :: proc "contextless" () -> ! {
@(private, require, link_name="_tls_index") _tls_index: u32
@(private, require, link_name="_tls_array") _tls_array: u32
@(link_name="memcpy")
memcpy :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
if dst == nil || src == nil || len == 0 || dst == src {
return dst
}
d := ([^]byte)(dst)
s := ([^]byte)(src)
for i in 0..<len {
d[i] = s[i]
}
return dst;
}
@(link_name="memmove")
memmove :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
if dst == nil || src == nil || len == 0 || dst == src {
return dst
}
d := ([^]byte)(dst)
s := ([^]byte)(src)
if s < d && d < s[len:] {
// Overlap
for i := len-1; len >= 0; i -= 1 {
d[i] = s[i]
}
} else {
for i in 0..<len {
d[i] = s[i]
}
}
return dst
}
@(link_name="memset")
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
if ptr != nil && len != 0 {
b := byte(val)
p := ([^]byte)(ptr)[:len]
for v in &p {
v = b
}
}
return ptr
}