]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
lib/nolibc: Implement strsep function
authorMarco Schlumpp <marco.schlumpp@gmail.com>
Tue, 29 Mar 2022 12:23:52 +0000 (14:23 +0200)
committerUnikraft <monkey@unikraft.io>
Thu, 4 May 2023 15:50:58 +0000 (15:50 +0000)
This function is an improvement of strtok that originates from BSD.

Signed-off-by: Marco Schlumpp <marco@unikraft.io>
Reviewed-by: Razvan Deaconescu <razvand@unikraft.io>
Reviewed-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Approved-by: Marc Rittinghaus <marc.rittinghaus@unikraft.io>
Tested-by: Unikraft CI <monkey@unikraft.io>
GitHub-Closes: #627

lib/nolibc/exportsyms.uk
lib/nolibc/include/string.h
lib/nolibc/string.c

index e169d1d02d505642726373a8ac945e1a2f2800f8..a283695fbd9c66afcb9b2a50ffa67d4ff9493bd5 100644 (file)
@@ -77,6 +77,7 @@ strcspn
 strspn
 strtok
 strtok_r
+strsep
 strndup
 strdup
 strlcpy
index 0fda98db7a7f0b9c3043b48ab4771133d18459ad..ae52ab8e8cdee1cbebc2ef436510f88b274478f7 100644 (file)
@@ -64,6 +64,7 @@ size_t strcspn(const char *s, const char *c);
 size_t strspn(const char *s, const char *c);
 char *strtok(char *restrict s, const char *restrict sep);
 char *strtok_r(char *restrict s, const char *restrict sep, char **restrict p);
+char *strsep(char **restrict s, const char *restrict sep);
 char *strndup(const char *str, size_t len);
 char *strdup(const char *str);
 char *strcat(char *restrict dest, const char *restrict src);
index d88853304015dc7d272289dc9075e9d8eb0dd62a..eacfbe8c72218eac9058d73b9a5e50f16f4a43d2 100644 (file)
@@ -299,6 +299,23 @@ char *strtok_r(char *restrict s, const char *restrict sep, char **restrict p)
        return s;
 }
 
+char *strsep(char **restrict s, const char *restrict sep)
+{
+       char *p, *str = *s;
+
+       if (!*s)
+               return NULL;
+
+       p = *s + strcspn(*s, sep);
+       if (*p)
+               *p++ = 0;
+       else
+               p = NULL;
+
+       *s = p;
+       return str;
+}
+
 char *strndup(const char *str, size_t len)
 {
        char *__res;