Annotation of embedaddon/php/ext/gd/libgd/gdhelpers.c, revision 1.1

1.1     ! misho       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: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>