string.c (1342B)
1 #include <klibc/string.h> 2 3 size_t 4 strlen(const char* str) 5 { 6 size_t len = 0; 7 while (str[len]) { 8 len++; 9 } 10 return len; 11 } 12 13 void* 14 memset(void* bufptr, int value, size_t size) 15 { 16 unsigned char* buf = (unsigned char*) bufptr; 17 for (size_t i = 0; i < size; i++) { 18 buf[i] = (unsigned char) value; 19 } 20 return bufptr; 21 } 22 23 void* 24 memmove(void* dstptr, const void* srcptr, size_t size) 25 { 26 unsigned char* dst = (unsigned char*) dstptr; 27 const unsigned char* src = (const unsigned char*) srcptr; 28 if (dst < src) { 29 for (size_t i = 0; i < size; i++) 30 dst[i] = src[i]; 31 } else { 32 for (size_t i = size; i != 0; i--) 33 dst[i-1] = src[i-1]; 34 } 35 return dstptr; 36 } 37 38 void* 39 memcpy(void* restrict dstptr, const void* restrict srcptr, size_t size) 40 { 41 unsigned char* dst = (unsigned char*) dstptr; 42 const unsigned char* src = (const unsigned char*) srcptr; 43 for (size_t i = 0; i < size; i++) { 44 dst[i] = src[i]; 45 } 46 return dstptr; 47 } 48 49 int 50 memcmp(const void* aptr, const void* bptr, size_t size) 51 { 52 const unsigned char* a = (const unsigned char*) aptr; 53 const unsigned char* b = (const unsigned char*) bptr; 54 for (size_t i = 0; i < size; i++) { 55 if (a[i] < b[i]) { 56 return -1; 57 } else if (b[i] < a[i]) { 58 return 1; 59 } 60 } 61 return 0; 62 }