| 71 |
theseven |
1 |
/***************************************************************************
|
|
|
2 |
* __________ __ ___.
|
|
|
3 |
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
|
4 |
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
|
5 |
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
|
6 |
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
|
7 |
* \/ \/ \/ \/ \/
|
|
|
8 |
* $Id: strtok.c 25850 2010-05-06 21:04:40Z kugel $
|
|
|
9 |
*
|
|
|
10 |
* Copyright (C) 2002 by Daniel Stenberg
|
|
|
11 |
*
|
|
|
12 |
* This program is free software; you can redistribute it and/or
|
|
|
13 |
* modify it under the terms of the GNU General Public License
|
|
|
14 |
* as published by the Free Software Foundation; either version 2
|
|
|
15 |
* of the License, or (at your option) any later version.
|
|
|
16 |
*
|
|
|
17 |
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
18 |
* KIND, either express or implied. *
|
|
|
19 |
****************************************************************************/
|
|
|
20 |
|
|
|
21 |
#include "global.h"
|
|
|
22 |
|
|
|
23 |
#ifndef HAVE_STRTOK_R
|
|
|
24 |
#include <stddef.h>
|
| 113 |
theseven |
25 |
#include "include/string.h"
|
| 71 |
theseven |
26 |
|
|
|
27 |
char *
|
|
|
28 |
strtok_r(char *ptr, const char *sep, char **end)
|
|
|
29 |
{
|
|
|
30 |
if (!ptr)
|
|
|
31 |
/* we got NULL input so then we get our last position instead */
|
|
|
32 |
ptr = *end;
|
|
|
33 |
|
|
|
34 |
/* pass all letters that are including in the separator string */
|
|
|
35 |
while (*ptr && strchr(sep, *ptr))
|
|
|
36 |
++ptr;
|
|
|
37 |
|
|
|
38 |
if (*ptr) {
|
|
|
39 |
/* so this is where the next piece of string starts */
|
|
|
40 |
char *start = ptr;
|
|
|
41 |
|
|
|
42 |
/* set the end pointer to the first byte after the start */
|
|
|
43 |
*end = start + 1;
|
|
|
44 |
|
|
|
45 |
/* scan through the string to find where it ends, it ends on a
|
|
|
46 |
null byte or a character that exists in the separator string */
|
|
|
47 |
while (**end && !strchr(sep, **end))
|
|
|
48 |
++*end;
|
|
|
49 |
|
|
|
50 |
if (**end) {
|
|
|
51 |
/* the end is not a null byte */
|
|
|
52 |
**end = '\0'; /* zero terminate it! */
|
|
|
53 |
++*end; /* advance last pointer to beyond the null byte */
|
|
|
54 |
}
|
|
|
55 |
|
|
|
56 |
return start; /* return the position where the string starts */
|
|
|
57 |
}
|
|
|
58 |
|
|
|
59 |
/* we ended up on a null byte, there are no more strings to find! */
|
|
|
60 |
return NULL;
|
|
|
61 |
}
|
|
|
62 |
|
|
|
63 |
#endif /* this was only compiled if strtok_r wasn't present */
|