Added binary and unicode file i/o support to msvcrt.
[reactos.git] / reactos / lib / msvcrt / string / strtok.c
1 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
2 #include <msvcrt/string.h>
3 #include <msvcrt/internal/tls.h>
4
5 char* strtok(char* s, const char* delim)
6 {
7 const char *spanp;
8 int c, sc;
9 char *tok;
10 PTHREADDATA ThreadData = GetThreadData();
11
12 if (s == NULL && (s = ThreadData->lasttoken) == NULL)
13 return (NULL);
14
15 /*
16 * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
17 */
18 cont:
19 c = *s++;
20 for (spanp = delim; (sc = *spanp++) != 0;) {
21 if (c == sc)
22 goto cont;
23 }
24
25 if (c == 0) { /* no non-delimiter characters */
26 ThreadData->lasttoken = NULL;
27 return (NULL);
28 }
29 tok = s - 1;
30
31 /*
32 * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
33 * Note that delim must have one NUL; we stop if we see that, too.
34 */
35 for (;;) {
36 c = *s++;
37 spanp = delim;
38 do {
39 if ((sc = *spanp++) == c) {
40 if (c == 0)
41 s = NULL;
42 else
43 s[-1] = 0;
44 ThreadData->lasttoken = s;
45 return (tok);
46 }
47 } while (sc != 0);
48 }
49 /* NOTREACHED */
50 }