00001
00015 #include <GKlib.h>
00016
00017
00018
00019
00020
00021
00022 void gk_strtokenize(char *str, char *delim, gk_Tokens_t *tokens)
00023 {
00024 int i, ntoks, slen;
00025
00026 tokens->strbuf = gk_strdup(str);
00027
00028 slen = strlen(str);
00029 str = tokens->strbuf;
00030
00031
00032 for (ntoks=0, i=0; i<slen;) {
00033
00034 while (i<slen && strchr(delim, str[i]))
00035 i++;
00036
00037 if (i == slen)
00038 break;
00039
00040 ntoks++;
00041
00042
00043 while (i<slen && !strchr(delim, str[i]))
00044 i++;
00045 }
00046
00047
00048 tokens->ntoks = ntoks;
00049 tokens->list = (char **)gk_malloc(ntoks*sizeof(char *), "strtokenize: tokens->list");
00050
00051
00052
00053 for (ntoks=0, i=0; i<slen;) {
00054
00055 while (i<slen && strchr(delim, str[i]))
00056 str[i++] = '\0';
00057
00058 if (i == slen)
00059 break;
00060
00061 tokens->list[ntoks++] = str+i;
00062
00063
00064 while (i<slen && !strchr(delim, str[i]))
00065 i++;
00066 }
00067 }
00068
00069
00070
00071
00072
00073 void gk_freetokenslist(gk_Tokens_t *tokens)
00074 {
00075 gk_free((void *)&tokens->list, &tokens->strbuf, LTERM);
00076 }
00077