From 521d01e8ad87e931af3e9a763cc84a6cf7fe5ee3 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Sun, 5 Dec 2021 09:47:21 -0800 Subject: Feat: basic string and memory functions Continue filling out the basic standard lib functions. Included prototypes of the str* and mem* families. Plan to add e(str|mem) and n(str|mem) variants as well. --- src/base/mem/compare.c | 12 ++++++++++++ src/base/mem/copy.c | 2 +- src/base/mem/move.c | 2 +- src/base/mem/rules.mk | 10 +--------- src/base/mem/set.c | 2 +- src/base/mem/set32.c | 15 +++++++++++++++ src/base/mem/set64.c | 4 ++-- 7 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 src/base/mem/compare.c create mode 100644 src/base/mem/set32.c (limited to 'src/base/mem') diff --git a/src/base/mem/compare.c b/src/base/mem/compare.c new file mode 100644 index 0000000..a2cdd1f --- /dev/null +++ b/src/base/mem/compare.c @@ -0,0 +1,12 @@ +#include + +int +mem·compare(void *qry, void *ref, uintptr size) +{ + intptr i; + char *q=qry, *r=ref; + for(i=0; i < size; i++) + if(q[i] != r[i]) + return q[i] - r[i]; + return 0; +} diff --git a/src/base/mem/copy.c b/src/base/mem/copy.c index 5ce4f90..001d5e5 100644 --- a/src/base/mem/copy.c +++ b/src/base/mem/copy.c @@ -1,7 +1,7 @@ #include "internal.h" int -mem·copy(void *dst, void *src, uintptr len) +mem·copy(void *dst, uintptr len, void *src) { char *d, *s; if((long)len < 0) diff --git a/src/base/mem/move.c b/src/base/mem/move.c index 5ad4074..7f6e906 100644 --- a/src/base/mem/move.c +++ b/src/base/mem/move.c @@ -1,7 +1,7 @@ #include "internal.h" int -mem·move(void *dst, void *src, uintptr len) +mem·move(void *dst, uintptr len, void *src) { char *d, *s; if((long)len < 0) diff --git a/src/base/mem/rules.mk b/src/base/mem/rules.mk index a4d9f10..9f07d34 100644 --- a/src/base/mem/rules.mk +++ b/src/base/mem/rules.mk @@ -1,9 +1 @@ -SRCS_$(d)+=\ - $(d)/mem/arena.c\ - $(d)/mem/buffer.c\ - $(d)/mem/interface.c\ - $(d)/mem/set.c\ - $(d)/mem/set64.c\ - $(d)/mem/findc.c\ - $(d)/mem/copy.c\ - $(d)/mem/move.c +SRCS_$(d)+=$(wildcard $(d)/mem/*.c) diff --git a/src/base/mem/set.c b/src/base/mem/set.c index 2e296be..cb19cae 100644 --- a/src/base/mem/set.c +++ b/src/base/mem/set.c @@ -1,7 +1,7 @@ #include "internal.h" int -mem·set(void *addr, int c, uintptr len) +mem·set(void *addr, uintptr len, int c) { char *a = addr; diff --git a/src/base/mem/set32.c b/src/base/mem/set32.c new file mode 100644 index 0000000..21ad64f --- /dev/null +++ b/src/base/mem/set32.c @@ -0,0 +1,15 @@ +#include "internal.h" + +int +mem·set32(void *dst, uintptr size, uint32 val) +{ + intptr i; + + for(i = 0; i < (size & (~3)); i += 4) + mem·copy((byte*)dst + i, 4, &val); + + for(; i < size; i++) + ((byte*)dst)[i] = ((byte*)&val)[i&3]; + + return 0; +} diff --git a/src/base/mem/set64.c b/src/base/mem/set64.c index 7000866..669c70c 100644 --- a/src/base/mem/set64.c +++ b/src/base/mem/set64.c @@ -1,12 +1,12 @@ #include "internal.h" int -mem·set64(void *dst, uint64 val, uintptr size) +mem·set64(void *dst, uintptr size, uint64 val) { intptr i; for(i = 0; i < (size & (~7)); i += 8) - memcpy((byte*)dst + i, &val, 8); + mem·copy((byte*)dst + i, 8, &val); for(; i < size; i++) ((byte*)dst)[i] = ((byte*)&val)[i&7]; -- cgit v1.2.1