tuxanci2-sdk
SDK for tuxanci2
Log | Files | Refs | README | LICENSE

string.c (1320B)


      1 #include <stdint.h>
      2 #include <stddef.h>
      3 
      4 void *memcpy(void *destination, const void *source, size_t count) {
      5 	uint8_t *destination_bytes = (uint8_t *)destination;
      6 	const uint8_t *source_bytes = (const uint8_t *)source;
      7 
      8 	for (size_t i = 0; i < count; i++) {
      9 		destination_bytes[i] = source_bytes[i];
     10 	}
     11 
     12 	return destination;
     13 }
     14 
     15 void *memmove(void *destination, const void *source, size_t count) {
     16 	uint8_t *destination_bytes = (uint8_t *)destination;
     17 	const uint8_t *source_bytes = (const uint8_t *)source;
     18 
     19 	if (destination_bytes < source_bytes) {
     20 		for (size_t i = 0; i < count; i++) {
     21 			destination_bytes[i] = source_bytes[i];
     22 		}
     23 	} else {
     24 		for (size_t i = count; i > 0; i--) {
     25 			destination_bytes[i - 1] = source_bytes[i - 1];
     26 		}
     27 	}
     28 
     29 	return destination;
     30 }
     31 
     32 void *memset(void *destination, int value, size_t count) {
     33 	uint8_t *destination_bytes = (uint8_t *)destination;
     34 
     35 	for (size_t i = 0; i < count; i++) {
     36 		destination_bytes[i] = (uint8_t)value;
     37 	}
     38 
     39 	return destination;
     40 }
     41 
     42 int memcmp(const void *first, const void *second, size_t count) {
     43 	const uint8_t *first_bytes = (const uint8_t *)first;
     44 	const uint8_t *second_bytes = (const uint8_t *)second;
     45 
     46 	for (size_t i = 0; i < count; i++) {
     47 		if (first_bytes[i] != second_bytes[i]) {
     48 			return first_bytes[i] < second_bytes[i] ? -1 : 1;
     49 		}
     50 	}
     51 
     52 	return 0;
     53 }