mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Add simple memcpy, memcmp and memset functions for nolibc.
This commit is contained in:
@@ -778,3 +778,41 @@ fn void* trealloc(void* ptr, usz size, usz alignment = mem::DEFAULT_MEM_ALIGNMEN
|
|||||||
return allocator::temp().resize(ptr, size, alignment)!!;
|
return allocator::temp().resize(ptr, size, alignment)!!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module std::core::mem @if(env::NO_LIBC);
|
||||||
|
|
||||||
|
fn CInt __memcmp(void* s1, void* s2, usz n) @weak @export("memcmp")
|
||||||
|
{
|
||||||
|
char* p1 = s1;
|
||||||
|
char* p2 = s2;
|
||||||
|
for (usz i = 0; i < n; i++, p1++, p2++)
|
||||||
|
{
|
||||||
|
char c1 = *p1;
|
||||||
|
char c2 = *p2;
|
||||||
|
if (c1 < c2) return -1;
|
||||||
|
if (c1 > c2) return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn void* __memset(void* str, CInt c, usz n) @weak @export("memset")
|
||||||
|
{
|
||||||
|
char* p = str;
|
||||||
|
char cc = (char)c;
|
||||||
|
for (usz i = 0; i < n; i++, p++)
|
||||||
|
{
|
||||||
|
*p = cc;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn void* __memcpy(void* dst, void* src, usz n) @weak @export("memcpy")
|
||||||
|
{
|
||||||
|
char* d = dst;
|
||||||
|
char* s = src;
|
||||||
|
for (usz i = 0; i < n; i++, d++, s++)
|
||||||
|
{
|
||||||
|
*d = *s;
|
||||||
|
}
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user