char *strchr(const char *s, int c) { while (*s != (char)c) if (!*s++) return 0; return (char *)s; } char *strpbrk(const char *s1, const char *s2) { while(*s1) if(strchr(s2, *s1++)) return (char*)--s1; return 0; } char *strcpy_custom(char *dest, const char* src) { char *ret = dest; while (*dest++ = *src++) ; return ret; } int strspn_custom(const char *p, const char *s) { int i, j; for (i = 0; p[i]; i++) { for (j = 0; s[j]; j++) { if (s[j] == p[i]) break; } if (!s[j]) break; } return (i); } char * strtok(char *s1, const char *delimit) { static char *lastToken = NULL; /* UNSAFE SHARED STATE! */ char *tmp; /* Skip leading delimiters if new string. */ if ( s1 == NULL ) { s1 = lastToken; if (s1 == NULL) /* End of story? */ return NULL; } else { s1 += strspn_custom(s1, delimit); } /* Find end of segment */ tmp = strpbrk(s1, delimit); if (tmp) { /* Found another delimiter, split string and save state. */ *tmp = '\0'; lastToken = tmp + 1; } else { /* Last segment, remember that. */ lastToken = NULL; } return s1; }