Replaced static variable by a library base member to
[aros:aros.git] / AROS / compiler / stdc / strtok.c
1 /*
2     Copyright © 1995-2012, The AROS Development Team. All rights reserved.
3     $Id$
4
5     C99 function strtok().
6 */
7
8 #include "__stdc_intbase.h"
9 #include <aros/symbolsets.h>
10
11 /*****************************************************************************
12
13     NAME */
14 #include <string.h>
15
16         char * strtok (
17
18 /*  SYNOPSIS */
19         char       * str,
20         const char * sep)
21
22 /*  FUNCTION
23         Separates a string by the characters in sep.
24
25     INPUTS
26         str - The string to check or NULL if the next word in
27                 the last string is to be searched.
28         sep - Characters which separate "words" in str.
29
30     RESULT
31         The first word in str or the next one if str is NULL.
32
33     NOTES
34         The function changes str !
35
36     EXAMPLE
37         char buffer[64];
38
39         strcpy (buffer, "Hello, this is a test.");
40
41         // Init. Returns "Hello"
42         strtok (str, " \t,.");
43
44         // Next word. Returns "this"
45         strtok (NULL, " \t,.");
46
47         // Next word. Returns "is"
48         strtok (NULL, " \t");
49
50         // Next word. Returns "a"
51         strtok (NULL, " \t");
52
53         // Next word. Returns "test."
54         strtok (NULL, " \t");
55
56         // Next word. Returns NULL.
57         strtok (NULL, " \t");
58
59     BUGS
60
61     SEE ALSO
62
63     INTERNALS
64
65 ******************************************************************************/
66 {
67     struct StdCIntBase *StdCBase = (struct StdCIntBase *)__aros_getbase_StdCBase();
68
69     if (str != NULL)
70         StdCBase->last = str;
71     else
72         str = StdCBase->last;
73
74     str += strspn (str, sep);
75
76     if (*str == '\0')
77         return NULL;
78
79     StdCBase->last = str;
80
81     StdCBase->last += strcspn (str, sep);
82
83     if (*StdCBase->last != '\0')
84         *StdCBase->last ++ = '\0';
85
86     return str;
87 } /* strtok */
88
89
90 static int __strtok_init(struct StdCIntBase *StdCBase)
91 {
92     StdCBase->last = NULL;
93
94     return 1;
95 }
96
97 ADD2OPENLIB(__strtok_init, 0);