#include "klibc.h" void *memcpy(void *dst, const void *src, size_t n) { char *dstChar = dst; const char *srcChar = src; for (size_t i = 0; i < n; i++) { *(dstChar++) = *(srcChar++); } return dst; } void *memset(void *src, int c, size_t n) { for (char *ptr = (char *)src; n > 0; n--, ptr++) { *ptr = (char)c; } return src; } char * itoa( int value, char * str, int base ) { char * rc; char * ptr; char * low; // Check for supported base. if ( base < 2 || base > 36 ) { *str = '\0'; return str; } rc = ptr = str; // Set '-' for negative decimals. if ( value < 0 && base == 10 ) { *ptr++ = '-'; } // Remember where the numbers start. low = ptr; // The actual conversion. do { // Modulo is negative for negative value. This trick makes abs() unnecessary. *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"[35 + value % base]; value /= base; } while ( value ); // Terminating the string. *ptr-- = '\0'; // Invert the numbers. while ( low < ptr ) { char tmp = *low; *low++ = *ptr; *ptr-- = tmp; } return rc; }