summaryrefslogtreecommitdiff
path: root/lib/strsep.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/strsep.c')
-rw-r--r--lib/strsep.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/strsep.c b/lib/strsep.c
new file mode 100644
index 000000000..101f9600d
--- /dev/null
+++ b/lib/strsep.c
@@ -0,0 +1,36 @@
+#include "config.h"
+#include <string.h>
+
+char *_xine_private_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;
+}