]> granicus.if.org Git - uw-imap/commitdiff
add files for 2007-01-30T23:38:19Z
authorUnknown <>
Tue, 30 Jan 2007 23:38:19 +0000 (23:38 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Fri, 7 Sep 2018 00:02:36 +0000 (00:02 +0000)
src/ansilib/strtok.c [new file with mode: 0644]

diff --git a/src/ansilib/strtok.c b/src/ansilib/strtok.c
new file mode 100644 (file)
index 0000000..973ba4e
--- /dev/null
@@ -0,0 +1,67 @@
+/* ========================================================================
+ * Copyright 1988-2007 University of Washington
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 
+ * ========================================================================
+ */
+
+/*
+ * Program:    String return successive tokens
+ *
+ * Author:     Mark Crispin
+ *             Networks and Distributed Computing
+ *             Computing & Communications
+ *             University of Washington
+ *             Administration Building, AG-44
+ *             Seattle, WA  98195
+ *
+ * Date:       11 May 1989
+ * Last Edited:        30 January 2007
+ */
+\f
+/* Find token in string
+ * Accepts: source pointer or NIL to use previous source
+ *         vector of token delimiters pointer
+ * Returns: pointer to next token
+ */
+
+static char *state = NIL;      /* string to locate tokens */
+
+char *strtok (char *s,char *ct)
+{
+  return strtok_r (s,ct,&state);/* jacket into reentrant routine */
+}
+
+
+/* Find token in string (reentrant)
+ * Accepts: source pointer or NIL to use previous source
+ *         vector of token delimiters pointer
+ *         returned state pointer
+ * Returns: pointer to next token
+ */
+
+char *strtok_r (char *s,char *ct,char **r)
+{   
+  char *t,*ts;
+  if (!s) s = *r;              /* use previous token if none specified */
+  *r = NIL;                    /* default to no returned state */
+  if (!(s && *s)) return NIL;  /* no tokens left */
+                               /* find any leading delimiters */
+  do for (t = ct, ts = NIL; *t; t++) if (*t == *s) {
+    if (*(ts = ++s)) break;    /* yes, restart search if more in string */
+    return NIL;                        /* else no more tokens */
+  } while (ts);                        /* continue until no more leading delimiters */
+                               /* can we find a new delimiter? */
+  for (ts = s; *ts; ts++) for (t = ct; *t; t++) if (*t == *ts) {
+    *ts++ = '\0';              /* yes, tie off token at that point */
+    *r = ts;                   /* save subsequent tokens for future call */
+    return s;                  /* return our token */
+  }
+  return s;                    /* return final token */
+}