diff options
author | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
---|---|---|
committer | Eduardo Chappa <echappa@gmx.com> | 2013-02-03 00:59:38 -0700 |
commit | 094ca96844842928810f14844413109fc6cdd890 (patch) | |
tree | e60efbb980f38ba9308ccb4fb2b77b87bbc115f3 /imap/src/ansilib/strtok.c | |
download | alpine-094ca96844842928810f14844413109fc6cdd890.tar.xz |
Initial Alpine Version
Diffstat (limited to 'imap/src/ansilib/strtok.c')
-rw-r--r-- | imap/src/ansilib/strtok.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/imap/src/ansilib/strtok.c b/imap/src/ansilib/strtok.c new file mode 100644 index 00000000..973ba4e7 --- /dev/null +++ b/imap/src/ansilib/strtok.c @@ -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 + */ + +/* 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 */ +} |