GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libc/string/strsep.c Lines: 13 13 100.0 %
Date: 2017-11-07 Branches: 8 8 100.0 %

Line Branch Exec Source
1
/*	$OpenBSD: strsep.c,v 1.8 2015/08/31 02:53:57 guenther Exp $	*/
2
3
/*-
4
 * Copyright (c) 1990, 1993
5
 *	The Regents of the University of California.  All rights reserved.
6
 *
7
 * Redistribution and use in source and binary forms, with or without
8
 * modification, are permitted provided that the following conditions
9
 * are met:
10
 * 1. Redistributions of source code must retain the above copyright
11
 *    notice, this list of conditions and the following disclaimer.
12
 * 2. Redistributions in binary form must reproduce the above copyright
13
 *    notice, this list of conditions and the following disclaimer in the
14
 *    documentation and/or other materials provided with the distribution.
15
 * 3. Neither the name of the University nor the names of its contributors
16
 *    may be used to endorse or promote products derived from this software
17
 *    without specific prior written permission.
18
 *
19
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
 * SUCH DAMAGE.
30
 */
31
32
#include <string.h>
33
34
/*
35
 * Get next token from string *stringp, where tokens are possibly-empty
36
 * strings separated by characters from delim.
37
 *
38
 * Writes NULs into the string at *stringp to end tokens.
39
 * delim need not remain constant from call to call.
40
 * On return, *stringp points past the last NUL written (if there might
41
 * be further tokens), or is NULL (if there are definitely no more tokens).
42
 *
43
 * If *stringp is NULL, strsep returns NULL.
44
 */
45
char *
46
strsep(char **stringp, const char *delim)
47
{
48
	char *s;
49
	const char *spanp;
50
	int c, sc;
51
	char *tok;
52
53
91508
	if ((s = *stringp) == NULL)
54
272
		return (NULL);
55
45482
	for (tok = s;;) {
56
213231
		c = *s++;
57
		spanp = delim;
58
213231
		do {
59
591035
			if ((sc = *spanp++) == c) {
60
45482
				if (c == 0)
61
2154
					s = NULL;
62
				else
63
43328
					s[-1] = 0;
64
45482
				*stringp = s;
65
45482
				return (tok);
66
			}
67
545553
		} while (sc != 0);
68
	}
69
	/* NOTREACHED */
70
45754
}
71
DEF_WEAK(strsep);