imapext-2007

annotate src/ansilib/strtok.c @ 0:ada5e610ab86

imap-2007e
author yuuji@gentei.org
date Mon, 14 Sep 2009 15:17:45 +0900
parents
children
rev   line source
yuuji@0 1 /* ========================================================================
yuuji@0 2 * Copyright 1988-2007 University of Washington
yuuji@0 3 *
yuuji@0 4 * Licensed under the Apache License, Version 2.0 (the "License");
yuuji@0 5 * you may not use this file except in compliance with the License.
yuuji@0 6 * You may obtain a copy of the License at
yuuji@0 7 *
yuuji@0 8 * http://www.apache.org/licenses/LICENSE-2.0
yuuji@0 9 *
yuuji@0 10 *
yuuji@0 11 * ========================================================================
yuuji@0 12 */
yuuji@0 13
yuuji@0 14 /*
yuuji@0 15 * Program: String return successive tokens
yuuji@0 16 *
yuuji@0 17 * Author: Mark Crispin
yuuji@0 18 * Networks and Distributed Computing
yuuji@0 19 * Computing & Communications
yuuji@0 20 * University of Washington
yuuji@0 21 * Administration Building, AG-44
yuuji@0 22 * Seattle, WA 98195
yuuji@0 23 *
yuuji@0 24 * Date: 11 May 1989
yuuji@0 25 * Last Edited: 30 January 2007
yuuji@0 26 */
yuuji@0 27
yuuji@0 28 /* Find token in string
yuuji@0 29 * Accepts: source pointer or NIL to use previous source
yuuji@0 30 * vector of token delimiters pointer
yuuji@0 31 * Returns: pointer to next token
yuuji@0 32 */
yuuji@0 33
yuuji@0 34 static char *state = NIL; /* string to locate tokens */
yuuji@0 35
yuuji@0 36 char *strtok (char *s,char *ct)
yuuji@0 37 {
yuuji@0 38 return strtok_r (s,ct,&state);/* jacket into reentrant routine */
yuuji@0 39 }
yuuji@0 40
yuuji@0 41
yuuji@0 42 /* Find token in string (reentrant)
yuuji@0 43 * Accepts: source pointer or NIL to use previous source
yuuji@0 44 * vector of token delimiters pointer
yuuji@0 45 * returned state pointer
yuuji@0 46 * Returns: pointer to next token
yuuji@0 47 */
yuuji@0 48
yuuji@0 49 char *strtok_r (char *s,char *ct,char **r)
yuuji@0 50 {
yuuji@0 51 char *t,*ts;
yuuji@0 52 if (!s) s = *r; /* use previous token if none specified */
yuuji@0 53 *r = NIL; /* default to no returned state */
yuuji@0 54 if (!(s && *s)) return NIL; /* no tokens left */
yuuji@0 55 /* find any leading delimiters */
yuuji@0 56 do for (t = ct, ts = NIL; *t; t++) if (*t == *s) {
yuuji@0 57 if (*(ts = ++s)) break; /* yes, restart search if more in string */
yuuji@0 58 return NIL; /* else no more tokens */
yuuji@0 59 } while (ts); /* continue until no more leading delimiters */
yuuji@0 60 /* can we find a new delimiter? */
yuuji@0 61 for (ts = s; *ts; ts++) for (t = ct; *t; t++) if (*t == *ts) {
yuuji@0 62 *ts++ = '\0'; /* yes, tie off token at that point */
yuuji@0 63 *r = ts; /* save subsequent tokens for future call */
yuuji@0 64 return s; /* return our token */
yuuji@0 65 }
yuuji@0 66 return s; /* return final token */
yuuji@0 67 }

UW-IMAP'd extensions by yuuji