#ifndef LWIP_STRING_H #define LWIP_STRING_H #include "kutils.h" #define memcpy k_memcpy #define memset k_memset #define strlen k_strlen #define strcmp k_strcmp #define strcpy k_strcpy static inline int memcmp(const void *s1, const void *s2, size_t n) { const unsigned char *p1 = (const unsigned char *)s1; const unsigned char *p2 = (const unsigned char *)s2; while (n--) { if (*p1 != *p2) return (int)*p1 - (int)*p2; p1++; p2++; } return 0; } static inline void *memmove(void *dest, const void *src, size_t n) { unsigned char *d = (unsigned char *)dest; const unsigned char *s = (const unsigned char *)src; if (d < s) { while (n--) *d++ = *s++; } else { d += n; s += n; while (n--) *--d = *--s; } return dest; } static inline char *strchr(const char *s, int c) { while (*s) { if (*s == (char)c) return (char *)s; s++; } if (c == 0) return (char *)s; return (void*)0; } static inline int strncmp(const char *s1, const char *s2, size_t n) { while (n && *s1 && (*s1 == *s2)) { s1++; s2++; n--; } if (n == 0) return 0; return (int)*(const unsigned char *)s1 - (int)*(const unsigned char *)s2; } static inline char *strncpy(char *dest, const char *src, size_t n) { size_t i; for (i = 0; i < n && src[i] != '\0'; i++) dest[i] = src[i]; for ( ; i < n; i++) dest[i] = '\0'; return dest; } static inline char *strstr(const char *haystack, const char *needle) { if (!*needle) return (char *)haystack; for (; *haystack; haystack++) { if (*haystack == *needle) { const char *h = haystack; const char *n = needle; while (*h && *n && *h == *n) { h++; n++; } if (!*n) return (char *)haystack; } } return (void*)0; } #endif