#include "fitz_base.h"
#include <string.h>

char *fz_strsep(char **stringp, const char *delim)
{
    char *ret = *stringp;
    if (ret == NULL) return NULL;
    if ((*stringp = strpbrk(*stringp, delim)) != NULL)
	*((*stringp)++) = '\0';
    return ret;
}

int fz_strlcpy(char *dst, const char *src, int siz)
{
    register char *d = dst;
    register const char *s = src;
    register int n = siz;

    /* Copy as many bytes as will fit */
    if (n != 0 && --n != 0) {
	do {
	    if ((*d++ = *s++) == 0)
		break;
	} while (--n != 0);
    }

    /* Not enough room in dst, add NUL and traverse rest of src */
    if (n == 0) {
	if (siz != 0)
	    *d = '\0';		/* NUL-terminate dst */
	while (*s++)
	    ;
    }

    return(s - src - 1);	/* count does not include NUL */
}

int fz_strlcat(char *dst, const char *src, int siz)
{
    register char *d = dst;
    register const char *s = src;
    register int n = siz;
    int dlen;

    /* Find the end of dst and adjust bytes left but don't go past end */
    while (*d != '\0' && n-- != 0)
	d++;
    dlen = d - dst;
    n = siz - dlen;

    if (n == 0)
	return dlen + strlen(s);
    while (*s != '\0') {
	if (n != 1) {
	    *d++ = *s;
	    n--;
	}
	s++;
    }
    *d = '\0';

    return dlen + (s - src);	/* count does not include NUL */
}

