1 /* Copyright (C) 2004, 2007, 2009-2021 Free Software Foundation, Inc. 2 3 Written by Yoann Vandoorselaere <yoann@prelude-ids.org>. 4 5 This file is free software: you can redistribute it and/or modify 6 it under the terms of the GNU Lesser General Public License as 7 published by the Free Software Foundation; either version 2.1 of the 8 License, or (at your option) any later version. 9 10 This file is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public License 16 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 17 18 #ifdef HAVE_CONFIG_H 19 # include <config.h> 20 #endif 21 22 /* Specification. */ 23 #include <string.h> 24 25 char * 26 strsep (char **stringp, const char *delim) /* */ 27 { 28 char *start = *stringp; 29 char *ptr; 30 31 if (start == NULL) 32 return NULL; 33 34 /* Optimize the case of no delimiters. */ 35 if (delim[0] == '\0') 36 { 37 *stringp = NULL; 38 return start; 39 } 40 41 /* Optimize the case of one delimiter. */ 42 if (delim[1] == '\0') 43 ptr = strchr (start, delim[0]); 44 else 45 /* The general case. */ 46 ptr = strpbrk (start, delim); 47 if (ptr == NULL) 48 { 49 *stringp = NULL; 50 return start; 51 } 52 53 *ptr = '\0'; 54 *stringp = ptr + 1; 55 56 return start; 57 }