aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/ChangeLog4
-rw-r--r--util/strgutil.c51
2 files changed, 54 insertions, 1 deletions
diff --git a/util/ChangeLog b/util/ChangeLog
index ccbe1764b..7097e9125 100644
--- a/util/ChangeLog
+++ b/util/ChangeLog
@@ -1,3 +1,7 @@
+2001-09-07 Werner Koch <[email protected]>
+
+ * strgutil.c (strsep): New, taken from glibc 2.2.1.
+
2001-09-03 Werner Koch <[email protected]>
* miscutil.c (strtimestamp,asctimestamp): Avoid trigraphs.
diff --git a/util/strgutil.c b/util/strgutil.c
index 4bae35e32..5e978eb04 100644
--- a/util/strgutil.c
+++ b/util/strgutil.c
@@ -689,6 +689,56 @@ stpcpy(char *a,const char *b)
}
#endif
+
+#ifndef HAVE_STRSEP
+/* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */
+char *
+strsep (char **stringp, const char *delim)
+{
+ char *begin, *end;
+
+ begin = *stringp;
+ if (begin == NULL)
+ return NULL;
+
+ /* A frequent case is when the delimiter string contains only one
+ character. Here we don't need to call the expensive `strpbrk'
+ function and instead work using `strchr'. */
+ 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
+ /* Find the end of the token. */
+ end = strpbrk (begin, delim);
+
+ if (end)
+ {
+ /* Terminate the token and set *STRINGP past NUL character. */
+ *end++ = '\0';
+ *stringp = end;
+ }
+ else
+ /* No more delimiters; this is the last token. */
+ *stringp = NULL;
+
+ return begin;
+}
+#endif /*HAVE_STRSEP*/
+
+
#ifndef HAVE_STRLWR
char *
strlwr(char *s)
@@ -823,4 +873,3 @@ vasprintf ( char **result, const char *format, va_list args)
#endif /*__MINGW32__*/
-