00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "mem.h"
00018 #include "str.h"
00019 #include "strtok.h"
00020
00021 strtok_t *strtok_init_str(strtok_t *st, const char *str, char *delim, int empty)
00022 {
00023 strtok_t *new;
00024 char *scpy, *cur, *token;
00025
00026 INIT_LIST_HEAD(&(st->list));
00027
00028 if (!str)
00029 return st;
00030
00031 scpy = cur = token = str_dup(str);
00032
00033 if (!scpy)
00034 return 0;
00035
00036 while (token) {
00037 cur = str_str(cur, delim);
00038
00039 if (cur) {
00040 mem_set(cur, 0, str_len(delim));
00041 cur += str_len(delim);
00042 }
00043
00044 if (empty || !str_isempty(token)) {
00045 if (!(new = mem_alloc(sizeof(strtok_t))))
00046 goto free;
00047
00048 if (!(new->token = str_dup(token)))
00049 goto free;
00050
00051 list_add_tail(&(new->list), &(st->list));
00052 }
00053
00054 token = cur;
00055 }
00056
00057 goto out;
00058
00059 free:
00060 strtok_free(st);
00061 st = 0;
00062
00063 out:
00064 mem_free(scpy);
00065 return st;
00066 }