diff --git a/build-aux/configure-lib.sh b/build-aux/configure-lib.sh index 1a254437..ab3a580f 100644 --- a/build-aux/configure-lib.sh +++ b/build-aux/configure-lib.sh @@ -360,6 +360,7 @@ lib/string/strerror.c lib/string/strncat.c lib/string/strpbrk.c lib/string/strspn.c +lib/string/strtok.c lib/stub/__cleanup.c lib/stub/asctime.c lib/stub/atan2.c diff --git a/include/string.h b/include/string.h index 60b2887e..cb60243a 100644 --- a/include/string.h +++ b/include/string.h @@ -48,6 +48,7 @@ char *strncpy (char *to, char const *from, size_t size); int strncmp (char const *, char const *, size_t); char *strrchr (char const *s, int c); char *strstr (char const *haystack, char const *needle); +char *strtok (char *new_string, char const *delimiters); char *strlwr (char *string); char *strupr (char *string); diff --git a/lib/string/strtok.c b/lib/string/strtok.c new file mode 100644 index 00000000..0ab05f93 --- /dev/null +++ b/lib/string/strtok.c @@ -0,0 +1,42 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2019 Jan (janneke) Nieuwenhuizen + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include + +char * +strtok (char *new_string, char const *delimiters) +{ + static char *mark; + if (new_string) + mark = new_string; + if (!*mark) + return 0; + while (strchr (delimiters, *mark)) + mark++; + char *point = mark; + while (*mark && !strchr (delimiters, *mark)) + mark++; + if (*mark) + { + *mark = 0; + mark++; + } + return point; +}