aboutsummaryrefslogtreecommitdiff
path: root/src/base/mem
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/mem')
-rw-r--r--src/base/mem/compare.c12
-rw-r--r--src/base/mem/copy.c2
-rw-r--r--src/base/mem/move.c2
-rw-r--r--src/base/mem/rules.mk10
-rw-r--r--src/base/mem/set.c2
-rw-r--r--src/base/mem/set32.c15
-rw-r--r--src/base/mem/set64.c4
7 files changed, 33 insertions, 14 deletions
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 <u.h>
+
+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];