Back to index

php5  5.3.10
tsrm_strtok_r.c
Go to the documentation of this file.
00001 #include <stdio.h>
00002 
00003 #include "tsrm_config_common.h"
00004 #include "tsrm_strtok_r.h"
00005 
00006 static inline int in_character_class(char ch, const char *delim)
00007 {
00008        while (*delim) {
00009               if (*delim == ch) {
00010                      return 1;
00011               }
00012               delim++;
00013        }
00014        return 0;
00015 }
00016 
00017 char *tsrm_strtok_r(char *s, const char *delim, char **last)
00018 {
00019        char *token;
00020 
00021        if (s == NULL) {
00022               s = *last;
00023        }
00024 
00025        while (*s && in_character_class(*s, delim)) {
00026               s++;
00027        }
00028        if (!*s) {
00029               return NULL;
00030        }
00031 
00032        token = s;
00033 
00034        while (*s && !in_character_class(*s, delim)) {
00035               s++;
00036        }
00037        if (!*s) {
00038               *last = s;
00039        } else {
00040               *s = '\0';
00041               *last = s + 1;
00042        }
00043        return token;
00044 }
00045 
00046 #if 0
00047 
00048 main()
00049 {
00050        char foo[] = "/foo/bar//\\barbara";
00051        char *last;
00052        char *token;
00053 
00054        token = tsrm_strtok_r(foo, "/\\", &last);
00055        while (token) {
00056               printf ("Token = '%s'\n", token);
00057               token = tsrm_strtok_r(NULL, "/\\", &last);
00058        }
00059        
00060        return 0;
00061 }
00062 
00063 #endif