mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-07 08:08:50 +00:00
Unify memset usage across platforms and core:c/libc
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user