1+ /*
2+ * Copyright (c) 1988 Regents of the University of California.
3+ * All rights reserved.
4+ *
5+ * Redistribution and use in source and binary forms, with or without
6+ * modification, are permitted provided that the following conditions
7+ * are met:
8+ * 1. Redistributions of source code must retain the above copyright
9+ * notice, this list of conditions and the following disclaimer.
10+ * 2. Redistributions in binary form must reproduce the above copyright
11+ * notice, this list of conditions and the following disclaimer in the
12+ * documentation and/or other materials provided with the distribution.
13+ * 3. Neither the name of the University nor the names of its contributors
14+ * may be used to endorse or promote products derived from this software
15+ * without specific prior written permission.
16+ *
17+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27+ * SUCH DAMAGE.
28+ */
29+ #include "flipbip39_string.h"
30+ #include <string.h>
31+ char *
32+ flipbip39_strtok (char * s , const char * delim )
33+ {
34+ static char * last ;
35+ return flipbip39_strtok_r (s , delim , & last );
36+ }
37+ char *
38+ flipbip39_strtok_r (char * s , const char * delim , char * * last )
39+ {
40+ char * spanp ;
41+ int c , sc ;
42+ char * tok ;
43+ if (s == NULL && (s = * last ) == NULL )
44+ return (NULL );
45+ /*
46+ * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
47+ */
48+ cont :
49+ c = * s ++ ;
50+ for (spanp = (char * )delim ; (sc = * spanp ++ ) != 0 ;) {
51+ if (c == sc )
52+ goto cont ;
53+ }
54+ if (c == 0 ) { /* no non-delimiter characters */
55+ * last = NULL ;
56+ return (NULL );
57+ }
58+ tok = s - 1 ;
59+ /*
60+ * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
61+ * Note that delim must have one NUL; we stop if we see that, too.
62+ */
63+ for (;;) {
64+ c = * s ++ ;
65+ spanp = (char * )delim ;
66+ do {
67+ if ((sc = * spanp ++ ) == c ) {
68+ if (c == 0 )
69+ s = NULL ;
70+ else
71+ s [-1 ] = 0 ;
72+ * last = s ;
73+ return (tok );
74+ }
75+ } while (sc != 0 );
76+ }
77+ /* NOTREACHED */
78+ }
0 commit comments