xref: /freebsd/contrib/unbound/compat/strsep.c (revision 3d6d3da45489fc5a3a3d3abf8117f34ab4633e35)
1*e2d15004SDag-Erling Smørgrav /**
2*e2d15004SDag-Erling Smørgrav  * strsep implementation for compatibility.
3*e2d15004SDag-Erling Smørgrav  *
4*e2d15004SDag-Erling Smørgrav   * LICENSE
5*e2d15004SDag-Erling Smørgrav   * Copyright (c) 2016, NLnet Labs
6*e2d15004SDag-Erling Smørgrav   * All rights reserved.
7*e2d15004SDag-Erling Smørgrav   *
8*e2d15004SDag-Erling Smørgrav   * Redistribution and use in source and binary forms, with or without
9*e2d15004SDag-Erling Smørgrav   * modification, are permitted provided that the following conditions are met:
10*e2d15004SDag-Erling Smørgrav   * * Redistributions of source code must retain the above copyright notice,
11*e2d15004SDag-Erling Smørgrav   *     this list of conditions and the following disclaimer.
12*e2d15004SDag-Erling Smørgrav   * * Redistributions in binary form must reproduce the above copyright
13*e2d15004SDag-Erling Smørgrav   *   notice, this list of conditions and the following disclaimer in the
14*e2d15004SDag-Erling Smørgrav   *   documentation and/or other materials provided with the distribution.
15*e2d15004SDag-Erling Smørgrav   * * Neither the name of NLnetLabs nor the names of its
16*e2d15004SDag-Erling Smørgrav   *   contributors may be used to endorse or promote products derived from this
17*e2d15004SDag-Erling Smørgrav   *   software without specific prior written permission.
18*e2d15004SDag-Erling Smørgrav   *
19*e2d15004SDag-Erling Smørgrav   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20*e2d15004SDag-Erling Smørgrav   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*e2d15004SDag-Erling Smørgrav   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*e2d15004SDag-Erling Smørgrav   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23*e2d15004SDag-Erling Smørgrav   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*e2d15004SDag-Erling Smørgrav   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*e2d15004SDag-Erling Smørgrav   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*e2d15004SDag-Erling Smørgrav   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*e2d15004SDag-Erling Smørgrav   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*e2d15004SDag-Erling Smørgrav   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*e2d15004SDag-Erling Smørgrav   * POSSIBILITY OF SUCH DAMAGE.
30*e2d15004SDag-Erling Smørgrav  **/
31*e2d15004SDag-Erling Smørgrav 
32*e2d15004SDag-Erling Smørgrav #include "config.h"
33*e2d15004SDag-Erling Smørgrav 
34*e2d15004SDag-Erling Smørgrav /** see if character is in the delimiter array */
35*e2d15004SDag-Erling Smørgrav static int
in_delim(char c,const char * delim)36*e2d15004SDag-Erling Smørgrav in_delim(char c, const char* delim)
37*e2d15004SDag-Erling Smørgrav {
38*e2d15004SDag-Erling Smørgrav 	const char* p;
39*e2d15004SDag-Erling Smørgrav 	if(!delim)
40*e2d15004SDag-Erling Smørgrav 		return 0;
41*e2d15004SDag-Erling Smørgrav 	for(p=delim; *p; p++) {
42*e2d15004SDag-Erling Smørgrav 		if(*p == c)
43*e2d15004SDag-Erling Smørgrav 			return 1;
44*e2d15004SDag-Erling Smørgrav 	}
45*e2d15004SDag-Erling Smørgrav 	return 0;
46*e2d15004SDag-Erling Smørgrav }
47*e2d15004SDag-Erling Smørgrav 
strsep(char ** stringp,const char * delim)48*e2d15004SDag-Erling Smørgrav char *strsep(char **stringp, const char *delim)
49*e2d15004SDag-Erling Smørgrav {
50*e2d15004SDag-Erling Smørgrav 	char* s;
51*e2d15004SDag-Erling Smørgrav 	char* orig;
52*e2d15004SDag-Erling Smørgrav 	if(stringp == NULL || *stringp == NULL)
53*e2d15004SDag-Erling Smørgrav 		return NULL;
54*e2d15004SDag-Erling Smørgrav 	orig = *stringp;
55*e2d15004SDag-Erling Smørgrav 	s = *stringp;
56*e2d15004SDag-Erling Smørgrav 	while(*s && !in_delim(*s, delim))
57*e2d15004SDag-Erling Smørgrav 		s++;
58*e2d15004SDag-Erling Smørgrav 	if(*s) {
59*e2d15004SDag-Erling Smørgrav 		*s = 0;
60*e2d15004SDag-Erling Smørgrav 		*stringp = s+1;
61*e2d15004SDag-Erling Smørgrav 	} else {
62*e2d15004SDag-Erling Smørgrav 		*stringp = NULL;
63*e2d15004SDag-Erling Smørgrav 	}
64*e2d15004SDag-Erling Smørgrav 	return orig;
65*e2d15004SDag-Erling Smørgrav }
66