]>
Commit | Line | Data |
---|---|---|
b168057a | 1 | /* Copyright (C) 1991-2015 Free Software Foundation, Inc. |
c84142e8 UD |
2 | This file is part of the GNU C Library. |
3 | ||
4 | The GNU C Library is free software; you can redistribute it and/or | |
41bdb6e2 AJ |
5 | modify it under the terms of the GNU Lesser General Public |
6 | License as published by the Free Software Foundation; either | |
7 | version 2.1 of the License, or (at your option) any later version. | |
c84142e8 UD |
8 | |
9 | The GNU C Library is distributed in the hope that it will be useful, | |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
41bdb6e2 | 12 | Lesser General Public License for more details. |
c84142e8 | 13 | |
41bdb6e2 | 14 | You should have received a copy of the GNU Lesser General Public |
59ba27a6 PE |
15 | License along with the GNU C Library; if not, see |
16 | <http://www.gnu.org/licenses/>. */ | |
59dd8641 | 17 | |
59dd8641 RM |
18 | #include <string.h> |
19 | ||
20 | ||
b8fd5502 | 21 | static char *olds; |
59dd8641 | 22 | |
9a0a462c UD |
23 | #undef strtok |
24 | ||
7b3551e3 OB |
25 | #ifndef STRTOK |
26 | # define STRTOK strtok | |
27 | #endif | |
28 | ||
59dd8641 RM |
29 | /* Parse S into tokens separated by characters in DELIM. |
30 | If S is NULL, the last string strtok() was called with is | |
31 | used. For example: | |
32 | char s[] = "-abc-=-def"; | |
33 | x = strtok(s, "-"); // x = "abc" | |
34 | x = strtok(NULL, "-="); // x = "def" | |
35 | x = strtok(NULL, "="); // x = NULL | |
682e4437 | 36 | // s = "abc\0=-def\0" |
59dd8641 RM |
37 | */ |
38 | char * | |
8667f90e | 39 | STRTOK (char *s, const char *delim) |
59dd8641 RM |
40 | { |
41 | char *token; | |
42 | ||
43 | if (s == NULL) | |
c4029823 | 44 | s = olds; |
59dd8641 RM |
45 | |
46 | /* Scan leading delimiters. */ | |
47 | s += strspn (s, delim); | |
48 | if (*s == '\0') | |
d436a9f7 UD |
49 | { |
50 | olds = s; | |
51 | return NULL; | |
52 | } | |
59dd8641 RM |
53 | |
54 | /* Find the end of the token. */ | |
55 | token = s; | |
56 | s = strpbrk (token, delim); | |
57 | if (s == NULL) | |
58 | /* This token finishes the string. */ | |
9f509acb | 59 | olds = __rawmemchr (token, '\0'); |
59dd8641 RM |
60 | else |
61 | { | |
62 | /* Terminate the token and make OLDS point past it. */ | |
63 | *s = '\0'; | |
64 | olds = s + 1; | |
65 | } | |
66 | return token; | |
67 | } |