AArch64 EL2 hypervisor for QEMU virt that boots at EL2
1

Configure Feed

Select the types of activity you want to include in your feed.

ariel / core / string.c
2.1 kB 101 lines
1#include "hv/string.h" 2 3void *hv_memset(void *dst, int value, size_t len) 4{ 5 unsigned char *p = (unsigned char *)dst; 6 while (len-- != 0u) { 7 *p++ = (unsigned char)value; 8 } 9 return dst; 10} 11 12void *hv_memcpy(void *dst, const void *src, size_t len) 13{ 14 unsigned char *d = (unsigned char *)dst; 15 const unsigned char *s = (const unsigned char *)src; 16 while (len-- != 0u) { 17 *d++ = *s++; 18 } 19 return dst; 20} 21 22void *hv_memmove(void *dst, const void *src, size_t len) 23{ 24 unsigned char *d = (unsigned char *)dst; 25 const unsigned char *s = (const unsigned char *)src; 26 if (d == s || len == 0u) { 27 return dst; 28 } 29 if (d < s) { 30 while (len-- != 0u) { 31 *d++ = *s++; 32 } 33 } else { 34 d += len; 35 s += len; 36 while (len-- != 0u) { 37 *--d = *--s; 38 } 39 } 40 return dst; 41} 42 43int hv_memcmp(const void *a, const void *b, size_t len) 44{ 45 const unsigned char *pa = (const unsigned char *)a; 46 const unsigned char *pb = (const unsigned char *)b; 47 for (size_t i = 0; i < len; i++) { 48 if (pa[i] != pb[i]) { 49 return (int)pa[i] - (int)pb[i]; 50 } 51 } 52 return 0; 53} 54 55size_t hv_strlen(const char *s) 56{ 57 size_t n = 0; 58 while (s[n] != '\0') { 59 n++; 60 } 61 return n; 62} 63 64int hv_strcmp(const char *a, const char *b) 65{ 66 while (*a != '\0' && *a == *b) { 67 a++; 68 b++; 69 } 70 return (int)(unsigned char)*a - (int)(unsigned char)*b; 71} 72 73int hv_strncmp(const char *a, const char *b, size_t n) 74{ 75 for (size_t i = 0; i < n; i++) { 76 if (a[i] == '\0' || a[i] != b[i]) { 77 return (int)(unsigned char)a[i] - (int)(unsigned char)b[i]; 78 } 79 } 80 return 0; 81} 82 83void *memset(void *dst, int value, size_t len) 84{ 85 return hv_memset(dst, value, len); 86} 87 88void *memcpy(void *dst, const void *src, size_t len) 89{ 90 return hv_memcpy(dst, src, len); 91} 92 93void *memmove(void *dst, const void *src, size_t len) 94{ 95 return hv_memmove(dst, src, len); 96} 97 98int memcmp(const void *a, const void *b, size_t len) 99{ 100 return hv_memcmp(a, b, len); 101}