56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "plstr.h"
|
|
|
|
char * PL_strtok_r(char *s1, const char *s2, char **lasts)
|
|
{
|
|
const char *sepp;
|
|
int c, sc;
|
|
char *tok;
|
|
|
|
if( s1 == NULL )
|
|
{
|
|
if( *lasts == NULL )
|
|
return NULL;
|
|
|
|
s1 = *lasts;
|
|
}
|
|
|
|
for( ; (c = *s1) != 0; s1++ )
|
|
{
|
|
for( sepp = s2 ; (sc = *sepp) != 0 ; sepp++ )
|
|
{
|
|
if( c == sc )
|
|
break;
|
|
}
|
|
if( sc == 0 )
|
|
break;
|
|
}
|
|
|
|
if( c == 0 )
|
|
{
|
|
*lasts = NULL;
|
|
return NULL;
|
|
}
|
|
|
|
tok = s1++;
|
|
|
|
for( ; (c = *s1) != 0; s1++ )
|
|
{
|
|
for( sepp = s2; (sc = *sepp) != 0; sepp++ )
|
|
{
|
|
if( c == sc )
|
|
{
|
|
*s1++ = '\0';
|
|
*lasts = s1;
|
|
return tok;
|
|
}
|
|
}
|
|
}
|
|
*lasts = NULL;
|
|
return tok;
|
|
}
|