#include "hv/string.h" void *hv_memset(void *dst, int value, size_t len) { unsigned char *p = (unsigned char *)dst; while (len-- != 0u) { *p++ = (unsigned char)value; } return dst; } void *hv_memcpy(void *dst, const void *src, size_t len) { unsigned char *d = (unsigned char *)dst; const unsigned char *s = (const unsigned char *)src; while (len-- != 0u) { *d++ = *s++; } return dst; } void *hv_memmove(void *dst, const void *src, size_t len) { unsigned char *d = (unsigned char *)dst; const unsigned char *s = (const unsigned char *)src; if (d == s || len == 0u) { return dst; } if (d < s) { while (len-- != 0u) { *d++ = *s++; } } else { d += len; s += len; while (len-- != 0u) { *--d = *--s; } } return dst; } int hv_memcmp(const void *a, const void *b, size_t len) { const unsigned char *pa = (const unsigned char *)a; const unsigned char *pb = (const unsigned char *)b; for (size_t i = 0; i < len; i++) { if (pa[i] != pb[i]) { return (int)pa[i] - (int)pb[i]; } } return 0; } size_t hv_strlen(const char *s) { size_t n = 0; while (s[n] != '\0') { n++; } return n; } int hv_strcmp(const char *a, const char *b) { while (*a != '\0' && *a == *b) { a++; b++; } return (int)(unsigned char)*a - (int)(unsigned char)*b; } int hv_strncmp(const char *a, const char *b, size_t n) { for (size_t i = 0; i < n; i++) { if (a[i] == '\0' || a[i] != b[i]) { return (int)(unsigned char)a[i] - (int)(unsigned char)b[i]; } } return 0; } void *memset(void *dst, int value, size_t len) { return hv_memset(dst, value, len); } void *memcpy(void *dst, const void *src, size_t len) { return hv_memcpy(dst, src, len); } void *memmove(void *dst, const void *src, size_t len) { return hv_memmove(dst, src, len); } int memcmp(const void *a, const void *b, size_t len) { return hv_memcmp(a, b, len); }