cowos

custom OS from scratch in C
git clone git://git.daat.foo/cowos.git
Log | Files | Refs | README | LICENSE

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 }