00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "flist.h"
00018 #include "strtok.h"
00019
00020 int flist64_from_str(const char *str, const flist64_t list[],
00021 uint64_t *flags, uint64_t *mask,
00022 char clmod, char *delim)
00023 {
00024 char *token;
00025 int clear = 0;
00026 uint64_t cur_flag;
00027
00028 strtok_t _st, *st = &_st, *p;
00029
00030 if (!strtok_init_str(st, str, delim, 0))
00031 return -1;
00032
00033 strtok_for_each(st, p) {
00034 token = p->token;
00035
00036 if (*token == clmod)
00037 clear = 1;
00038
00039 cur_flag = flist64_getval(list, token+clear);
00040
00041 if (!cur_flag) {
00042 strtok_free(st);
00043 return -1;
00044 }
00045
00046 if (clear) {
00047 *flags &= ~cur_flag;
00048 *mask |= cur_flag;
00049 } else {
00050 *flags |= cur_flag;
00051 *mask |= cur_flag;
00052 }
00053 }
00054
00055 strtok_free(st);
00056
00057 return 0;
00058 }