/* * mdutil.c * * Summary: Additional routines. * * Author: David Hardy */ #include #include #include "mdutil.h" /* * My own version of strtok_r(), since it isn't universally supported. */ char *mdutil_strtok_r(register char *s, register const char *ct, char **last) { register char *p; register const char *q; if (s == NULL) s = *last; /* * Find first non-delimiter in s. */ for ( ; ; s++) { for (q = ct; *s != *q && *q != '\0'; q++) ; if (*q == '\0') break; } /* * If there are no non-delimiters in s, return NULL. */ if (*s == '\0') return NULL; /* * Otherwise, mark next delimiter with '\0' and save last part of string. */ for (p = s + 1; *p != '\0'; p++) { for (q = ct; *p != *q && *q != '\0'; q++) ; if (*p == *q) { *p = '\0'; *last = p + 1; return s; } } *last = p; return s; } /* * My own version of strcasecmp(), since it isn't universally supported. */ int mdutil_strcasecmp(register const char *cs, register const char *ct) { register int ks=0, kt=0; while ((ks=tolower(*cs++)) == (kt=tolower(*ct++)) && ks != 0) ; return (ks - kt); } /* * My own version of strncasecmp(), since it isn't universally supported. */ int mdutil_strncasecmp(const char *cs, const char *ct, int nbytes) { register int ks=0, kt=0; while ((nbytes--)>0 && (ks=tolower(*cs++)) == (kt=tolower(*ct++)) && ks!=0) ; return (ks - kt); }