// // Created by rick on 01-02-21. // #include #include #include int memcpy(void *dst, const void *src, size_t amount) { for (size_t i = 0; i < amount; i++) { ((char *) dst)[i] = ((const char *) src)[i]; } return 0; } int memset(void *dst, int data, size_t amount) { for (size_t i = 0; i < amount; ++i) { ((char *) dst)[i] = (char) data; } return 0; } int strcpy(char *dst, const char *src) { return memcpy(dst, src, strlen(src) + 1); } int strncpy(char *dst, const char *src, size_t n) { return memcpy(dst, src, MIN(strlen(src), n) + 1); } size_t strlen(const char *str) { int length = 0; while (str[length] != 0) { length++; } return length; } int strcmp(const char *s1, const char *s2) { int len1 = strlen(s1); int len2 = strlen(s2); return strncmp(s1, s2, MAX(len1, len2)); } const char *strchr(const char *s, char c) { int index = 0; while (1) { if (s[index] == c) { return &s[index]; } if (s[index] == 0) { return NULL; } index++; } } int memcmp(const void *s1, const void *s2, size_t n) { uint8_t a, b; for (size_t i = 0; i < n; ++i) { a = ((uint8_t *) s1)[i]; b = ((uint8_t *) s2)[i]; if (a > b) return 1; if (b < a) return -1; } return 0; } int strncmp(const char *s1, const char *s2, int n) { for (int i = 0; i < n; ++i) { if (s1[i] == 0 && s2[i] == 0) { return 0; } if (s1[i] == 0) { return -1; } if (s2[i] == 0) { return 1; } if (s1[i] > s2[i]) { return -1; } if (s1[i] < s2[i]) { return 1; } } return 0; } char *strcat(char *dest, const char *src) { size_t count = strlen(src); return strncat(dest, src, count); } char *strncat(char *dest, const char *src, size_t n) { size_t start = strlen(dest); for (size_t index = 0; index < n; index++) { char val = src[index]; dest[start + index] = val; if (val == 0) { dest[start + index] = 0; break; } } return dest; }