From 58a1383723e5599dac41f0f3af352d61c00fbef2 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Wed, 9 Jul 2014 23:44:10 +0200 Subject: [PATCH] Add strsep(3). --- libc/Makefile | 1 + libc/include/string.h | 1 + libc/string/strsep.cpp | 43 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 libc/string/strsep.cpp diff --git a/libc/Makefile b/libc/Makefile index 7aafaae3..4b20911c 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -221,6 +221,7 @@ string/strndup.o \ string/strnlen.o \ string/strpbrk.o \ string/strrchr.o \ +string/strsep.o \ string/strsignal.o \ string/strspn.o \ string/strstr.o \ diff --git a/libc/include/string.h b/libc/include/string.h index 5fbff141..e618e6f6 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -132,6 +132,7 @@ char* strchrnul(const char* str, int c); size_t strlcat(char* __restrict, const char* __restrict, size_t); size_t strlcpy(char* __restrict, const char* __restrict, size_t); /* TODO: strncasecmp_l */ +char* strsep(char**, const char*); int strverscmp(const char*, const char*); int timingsafe_memcmp(const void*, const void*, size_t); #endif diff --git a/libc/string/strsep.cpp b/libc/string/strsep.cpp new file mode 100644 index 00000000..6fb95ac9 --- /dev/null +++ b/libc/string/strsep.cpp @@ -0,0 +1,43 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2014. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + string/strsep.cpp + Extract a token from a string. + +*******************************************************************************/ + +#include + +extern "C" char* strsep(char** string_ptr, const char* delim) +{ + char* token = *string_ptr; + if ( !token ) + return NULL; + size_t token_length = strcspn(token, delim); + if ( token[token_length] ) + { + token[token_length++] = '\0'; + *string_ptr = token + token_length; + } + else + { + *string_ptr = (char*) NULL; + } + return token; +}