aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/platform.h6
-rw-r--r--libbb/platform.c27
2 files changed, 33 insertions, 0 deletions
diff --git a/include/platform.h b/include/platform.h
index 4bd7a3d2e..0dadf42bd 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -16,6 +16,7 @@
#define HAVE_SETBIT 1
#define HAVE_STRCASESTR 1
#define HAVE_STRCHRNUL 1
+#define HAVE_STRSEP 1
#define HAVE_STRSIGNAL 1
#define HAVE_VASPRINTF 1
@@ -353,6 +354,7 @@ typedef unsigned smalluint;
# undef HAVE_SETBIT
# undef HAVE_STRCASESTR
# undef HAVE_STRCHRNUL
+# undef HAVE_STRSEP
# undef HAVE_STRSIGNAL
# undef HAVE_VASPRINTF
#endif
@@ -391,6 +393,10 @@ extern char *strcasestr(const char *s, const char *pattern) FAST_FUNC;
extern char *strchrnul(const char *s, int c) FAST_FUNC;
#endif
+#ifndef HAVE_STRSEP
+extern char *strsep(char **stringp, const char *delim) FAST_FUNC;
+#endif
+
#ifndef HAVE_STRSIGNAL
/* Not exactly the same: instead of "Stopped" it shows "STOP" etc */
# define strsignal(sig) get_signame(sig)
diff --git a/libbb/platform.c b/libbb/platform.c
index 17ad3f75a..7a8b17657 100644
--- a/libbb/platform.c
+++ b/libbb/platform.c
@@ -107,3 +107,30 @@ char* FAST_FUNC strcasestr(const char *s, const char *pattern)
return 0;
}
#endif
+
+#ifndef HAVE_STRSEP
+/* Copyright (C) 2004 Free Software Foundation, Inc. */
+char* FAST_FUNC strsep(char **stringp, const char *delim)
+{
+ char *start = *stringp;
+ char *ptr;
+
+ if (!start)
+ return NULL;
+
+ if (!*delim)
+ ptr = start + strlen(start);
+ else {
+ ptr = strpbrk(start, delim);
+ if (!ptr) {
+ *stringp = NULL;
+ return start;
+ }
+ }
+
+ *ptr = '\0';
+ *stringp = ptr + 1;
+
+ return start;
+}
+#endif