1,6 → 1,7 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (c) 2008 Jiri Svoboda |
* Copyright (C) 1998 by Wes Peters <wes@softweyr.com> |
* Copyright (c) 1988, 1993 The Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
511,36 → 512,51 |
return (char *) memcpy(ret, s1, len); |
} |
|
char *strtok(char *s, const char *delim) |
/* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
char * strtok_r(char *s, const char *delim, char **last) |
{ |
static char *next; |
char *spanp, *tok; |
int c, sc; |
|
return strtok_r(s, delim, &next); |
} |
if (s == NULL && (s = *last) == NULL) |
return (NULL); |
|
char *strtok_r(char *s, const char *delim, char **next) |
{ |
char *start, *end; |
cont: |
c = *s++; |
for (spanp = (char *)delim; (sc = *spanp++) != 0;) { |
if (c == sc) |
goto cont; |
} |
|
if (s == NULL) |
s = *next; |
if (c == 0) { /* no non-delimiter characters */ |
*last = NULL; |
return (NULL); |
} |
|
/* Skip over leading delimiters. */ |
while (*s && (strchr(delim, *s) != NULL)) ++s; |
start = s; |
tok = s - 1; |
|
/* Skip over token characters. */ |
while (*s && (strchr(delim, *s) == NULL)) ++s; |
end = s; |
*next = (*s ? s + 1 : s); |
|
if (start == end) { |
return NULL; /* No more tokens. */ |
for (;;) { |
c = *s++; |
spanp = (char *)delim; |
do { |
if ((sc = *spanp++) == c) { |
if (c == 0) |
s = NULL; |
else |
s[-1] = '\0'; |
*last = s; |
return (tok); |
} |
} while (sc != 0); |
} |
} |
|
/* Overwrite delimiter with NULL terminator. */ |
*end = '\0'; |
return start; |
/* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
char * strtok(char *s, const char *delim) |
{ |
static char *last; |
|
return (strtok_r(s, delim, &last)); |
} |
|
/** @} |