#include "string.h" void *memset(void *s, int c, size_t n) { for(size_t i = 0; i < n; i++) { ((char*)s)[i] = c; } return s; } void *memcpy(void *a, const void *b, size_t n) { for(size_t i = 0; i < n; i++) { ((char*)a)[i] = ((const char*)b)[i]; } return a; } int memcmp(const void *a, const void *b, size_t n) { const char *ca = a; const char *cb = b; for(size_t i = 0; i < n; i++) { if(ca[i] != cb[i]) return ca[i] - cb[i]; } return 0; } size_t strlen(const char *s) { size_t i = 0; for(; s[i]; i++); return i; } char c_toupper(char c) { return (c > 0x60 && c < 0x7B) ? (c - 0x20) : c; } char *str_toupper(char *s, size_t n) { for(size_t i = 0; i < n; i++) { s[i] = c_toupper(s[i]); } return s; } int strncmp(const char *s1, const char *s2, size_t n) { size_t i = 0; for(; s1[i] && s2[i] && i < n; i++) { int diff = s1[i] - s2[i]; if(diff) return diff; } return s1[i] - s2[i]; } char *strncpy(size_t n, char *restrict s1, const char *restrict s2) { for(size_t i = 0; s2[i] && i < n; i++) s1[i] = s2[i]; return s1; }