summaryrefslogtreecommitdiff
path: root/src/shared/mem.c
diff options
context:
space:
mode:
authordzwdz2023-08-14 18:51:07 +0200
committerdzwdz2023-08-14 18:51:07 +0200
commit642b5fb0007b64c77d186fcb018d571152ee1d47 (patch)
tree1c466461f3602d306be309a053edae558ef2568e /src/shared/mem.c
parent8050069c57b729c18c19b1a03ab6e4bf63b4735e (diff)
reorganization: first steps
Diffstat (limited to 'src/shared/mem.c')
-rw-r--r--src/shared/mem.c82
1 files changed, 0 insertions, 82 deletions
diff --git a/src/shared/mem.c b/src/shared/mem.c
deleted file mode 100644
index 14dd6bd..0000000
--- a/src/shared/mem.c
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <assert.h>
-#include <shared/mem.h>
-#include <stdint.h>
-
-union dualptr_const { const uintptr_t *w; const char *c; uintptr_t u; };
-union dualptr { uintptr_t *w; char *c; uintptr_t u; };
-
-void *memchr(const void *s, int c, size_t n) {
- const unsigned char *s2 = s;
- for (size_t i = 0; i < n; i++) {
- if (s2[i] == (unsigned char)c)
- return (void*)&s2[i];
- }
- return NULL;
-}
-
-int memcmp(const void *s1, const void *s2, size_t n) {
- const unsigned char *c1 = s1, *c2 = s2;
- for (size_t i = 0; i < n; i++) {
- if (c1[i] != c2[i]) {
- if (c1[i] < c2[i]) return -1;
- else return 1;
- }
- }
- return 0;
-}
-
-void *memcpy(void *dest, const void *src, size_t n) {
- // TODO erms, rep movsb
- union dualptr_const s = {.c = src};
- union dualptr d = {.c = dest};
- if (dest == src) return dest;
- // assert(src >= dest || src + n < dest);
-
- for (; (d.u & 7) && n != 0; n--) {
- *(d.c)++ = *(s.c)++;
- }
- while (n >= sizeof(uintptr_t)) {
- *(d.w)++ = *(s.w)++;
- n -= sizeof(uintptr_t);
- }
- while (n-- != 0) {
- *(d.c)++ = *(s.c)++;
- }
- return dest;
-}
-
-void *memmove(void *dest, const void *src, size_t n) {
- if (src >= dest || src + n < dest)
- return memcpy(dest, src, n);
- for (; n; n--) /* naive reverse copy */
- ((uint8_t*)dest)[n-1] = ((uint8_t*)src)[n-1];
- return dest;
-}
-
-void *memset(void *s, int c, size_t n) {
- union dualptr d = {.c = s};
-
- uintptr_t fill = (c & 0xff) * 0x0101010101010101;
- while (n >= sizeof(uintptr_t)) {
- *(d.w)++ = fill;
- n -= sizeof(uintptr_t);
- }
- while (n-- != 0)
- *(d.c)++ = c;
- return s;
-}
-
-int strcmp(const char *s1, const char *s2) {
- while (*s1 && *s1 == *s2) {
- s1++; s2++;
- }
- if (*s1 == *s2) return 0;
- if (*s1 < *s2) return -1;
- else return 1;
-}
-
-size_t strlen(const char *s) {
- size_t c = 0;
- while (*s++) c++;
- return c;
-}