summaryrefslogtreecommitdiffstats
path: root/osdep/strsep.c
diff options
context:
space:
mode:
Diffstat (limited to 'osdep/strsep.c')
-rw-r--r--osdep/strsep.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/osdep/strsep.c b/osdep/strsep.c
new file mode 100644
index 0000000000..863a39cc70
--- /dev/null
+++ b/osdep/strsep.c
@@ -0,0 +1,42 @@
+/* strsep implementation for systems that do not have it in libc */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "../config.h"
+
+#ifndef HAVE_STRSEP
+char *strsep(char **stringp, const char *delim) {
+ char *begin, *end;
+
+ begin = *stringp;
+ if(begin == NULL)
+ return NULL;
+
+ if(delim[0] == '\0' || delim[1] == '\0') {
+ char ch = delim[0];
+
+ if(ch == '\0')
+ end = NULL;
+ else {
+ if(*begin == ch)
+ end = begin;
+ else if(*begin == '\0')
+ end = NULL;
+ else
+ end = strchr(begin + 1, ch);
+ }
+ }
+ else
+ end = strpbrk(begin, delim);
+
+ if(end) {
+ *end++ = '\0';
+ *stringp = end;
+ }
+ else
+ *stringp = NULL;
+
+ return begin;
+}
+#endif