root/ext/gd/libgd/gdhelpers.c

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

DEFINITIONS

This source file includes following definitions.
  1. gd_strtok_r

   1 #ifdef HAVE_CONFIG_H
   2 #include "config.h"
   3 #endif
   4 
   5 #include "gd.h"
   6 #include "gdhelpers.h"
   7 #include <stdlib.h>
   8 #include <string.h>
   9 
  10 /* TBB: gd_strtok_r is not portable; provide an implementation */
  11 
  12 #define SEP_TEST (separators[*((unsigned char *) s)])
  13 
  14 char *
  15 gd_strtok_r (char *s, char *sep, char **state)
  16 {
  17   char separators[256];
  18   char *start;
  19   char *result = 0;
  20   memset (separators, 0, sizeof (separators));
  21   while (*sep)
  22     {
  23       separators[*((unsigned char *) sep)] = 1;
  24       sep++;
  25     }
  26   if (!s)
  27     {
  28       /* Pick up where we left off */
  29       s = *state;
  30     }
  31   start = s;
  32   /* 1. EOS */
  33   if (!(*s))
  34     {
  35       *state = s;
  36       return 0;
  37     }
  38   /* 2. Leading separators, if any */
  39   if (SEP_TEST)
  40     {
  41       do
  42         {
  43           s++;
  44         }
  45       while (SEP_TEST);
  46       /* 2a. EOS after separators only */
  47       if (!(*s))
  48         {
  49           *state = s;
  50           return 0;
  51         }
  52     }
  53   /* 3. A token */
  54   result = s;
  55   do
  56     {
  57       /* 3a. Token at end of string */
  58       if (!(*s))
  59         {
  60           *state = s;
  61           return result;
  62         }
  63       s++;
  64     }
  65   while (!SEP_TEST);
  66   /* 4. Terminate token and skip trailing separators */
  67   *s = '\0';
  68   do
  69     {
  70       s++;
  71     }
  72   while (SEP_TEST);
  73   /* 5. Return token */
  74   *state = s;
  75   return result;
  76 }

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