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