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