IPv6
Code:
size_t strlen(const char* sp) {
size_t ret = 0;
while (*sp++) ret++;
return ret;
}
char* strcat(char* sp1, const char* sp2, size_t count) {
char *s1 = sp1 + strlen(sp1), *s2 = (char*)sp2;
while (*s2 && count--) *s1++ = *s2++;
*s1 = '\0';
return sp1;
}
char* strstr(const char* sp1, const char* sp2) {
char *scan = (char*)sp1, *matcher = (char*)sp2, *start = NULL;
while (*scan) {
if (*scan != *matcher) { // not equal, start over scanning
if (start) scan = start + 1; // continue scan right after first matching char of previous match (if any)..
else ++scan; // ..or just go on (if no partial match yet)
matcher = (char*)sp2; // also reset matcher
start = NULL; // reset start point of match (cause there is none)
continue;
}
if (start == NULL) start = scan; // remember start of match for return if complete match is found
++matcher;
if (*matcher == '\0') return start; // found complete match
++scan;
}
return NULL;
}