Prex Home / Browse Source - Prex Version: 0.9.0

root/usr/lib/libc/string/strtok_r.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. strtok_r

   1 /*      $NetBSD: strtok_r.c,v 1.9 2003/08/07 16:43:53 agc Exp $ */
   2 
   3 /*
   4  * Copyright (c) 1988 Regents of the University of California.
   5  * All rights reserved.
   6  *
   7  * Redistribution and use in source and binary forms, with or without
   8  * modification, are permitted provided that the following conditions
   9  * are met:
  10  * 1. Redistributions of source code must retain the above copyright
  11  *    notice, this list of conditions and the following disclaimer.
  12  * 2. Redistributions in binary form must reproduce the above copyright
  13  *    notice, this list of conditions and the following disclaimer in the
  14  *    documentation and/or other materials provided with the distribution.
  15  * 3. Neither the name of the University nor the names of its contributors
  16  *    may be used to endorse or promote products derived from this software
  17  *    without specific prior written permission.
  18  *
  19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  29  * SUCH DAMAGE.
  30  */
  31 
  32 #include <sys/cdefs.h>
  33 #include <string.h>
  34 
  35 char *
  36 strtok_r(s, delim, lasts)
  37         char *s;
  38         const char *delim;
  39         char **lasts;
  40 {
  41         const char *spanp;
  42         int c, sc;
  43         char *tok;
  44 
  45         if (s == NULL && (s = *lasts) == NULL)
  46                 return (NULL);
  47 
  48         /*
  49          * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
  50          */
  51 cont:
  52         c = *s++;
  53         for (spanp = delim; (sc = *spanp++) != 0;) {
  54                 if (c == sc)
  55                         goto cont;
  56         }
  57 
  58         if (c == 0) {           /* no non-delimiter characters */
  59                 *lasts = NULL;
  60                 return (NULL);
  61         }
  62         tok = s - 1;
  63 
  64         /*
  65          * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
  66          * Note that delim must have one NUL; we stop if we see that, too.
  67          */
  68         for (;;) {
  69                 c = *s++;
  70                 spanp = delim;
  71                 do {
  72                         if ((sc = *spanp++) == c) {
  73                                 if (c == 0)
  74                                         s = NULL;
  75                                 else
  76                                         s[-1] = 0;
  77                                 *lasts = s;
  78                                 return (tok);
  79                         }
  80                 } while (sc != 0);
  81         }
  82         /* NOTREACHED */
  83 }

/* [<][>][^][v][top][bottom][index][help] */