diff options
author | dzwdz | 2023-08-14 18:51:07 +0200 |
---|---|---|
committer | dzwdz | 2023-08-14 18:51:07 +0200 |
commit | 642b5fb0007b64c77d186fcb018d571152ee1d47 (patch) | |
tree | 1c466461f3602d306be309a053edae558ef2568e /src/shared/mem.c | |
parent | 8050069c57b729c18c19b1a03ab6e4bf63b4735e (diff) |
reorganization: first steps
Diffstat (limited to 'src/shared/mem.c')
-rw-r--r-- | src/shared/mem.c | 82 |
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; -} |