root/src/system/libroot/posix/wchar/wcstok.c
/*
** Copyright 2001, Travis Geiselbrecht.
** Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
** All rights reserved. Distributed under the terms of the NewOS License.
*/


#include <wchar_private.h>


wchar_t *
__wcstok(wchar_t* wcs, const wchar_t* delim, wchar_t** savePtr)
{
        wchar_t *wcsBegin, *wcsEnd;

        if (wcs == NULL && savePtr == NULL)
                return NULL;

        wcsBegin  = wcs ? wcs : *savePtr;
        if (wcsBegin == NULL)
                return NULL;

        wcsBegin += wcsspn(wcsBegin, delim);
        if (*wcsBegin == '\0') {
                if (savePtr)
                        *savePtr = NULL;
                return NULL;
        }

        wcsEnd = wcspbrk(wcsBegin, delim);
        if (wcsEnd && *wcsEnd != '\0')
                *wcsEnd++ = '\0';
        if (savePtr)
                *savePtr = wcsEnd;

        return wcsBegin;
}


B_DEFINE_WEAK_ALIAS(__wcstok, wcstok);