19 #include "sion_flags.h" 20 #include "sion_internal.h" 23 #define DFUNCTION "_sion_flags_init_entry" 26 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
32 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
36 #define DFUNCTION "_sion_flags_create_entry" 47 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
50 _sion_flags_init_entry(new_entry);
52 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
58 #define DFUNCTION "_sion_flags_destroy_entry" 61 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
68 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
72 #define DFUNCTION "_sion_flags_iter" 75 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
76 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
82 #define DFUNCTION "_sion_flags_init_store" 85 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
88 store->current = store->root;
90 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
94 #define DFUNCTION "_sion_flags_create_store" 105 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
108 _sion_flags_init_store(new_store);
110 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
116 #define DFUNCTION "_sion_flags_destroy_store" 122 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
124 entry = _sion_flags_iter(store);
126 while (entry != NULL) {
128 _sion_flags_destroy_entry(entry);
135 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
139 #define DFUNCTION "_sion_flags_add_entry" 156 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
159 entry->key = (
char*)malloc(strlen(key) + 1);
160 entry->val = (
char*)malloc(strlen(val) + 1);
162 strcpy(entry->key, key);
163 strcpy(entry->val, val);
164 entry->next = new_entry;
166 DPRINTFP((2, DFUNCTION, -1,
"leave (entry->key = %s, entry->val = %s\n",
167 entry->key, entry->val));
173 #define DFUNCTION "_sion_flags_add" 178 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
182 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
186 #define DFUNCTION "_sion_flags_get" 191 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
193 for (iter = _sion_flags_iter(store); iter->next != NULL; iter = iter->next) {
194 if (!strcmp(iter->key, key)) {
195 DPRINTFP((2, DFUNCTION, -1,
"leave (key in store)\n"));
200 DPRINTFP((2, DFUNCTION, -1,
"leave (key not in store)\n"));
206 #define DFUNCTION "_sion_flags_update_mask" 211 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
214 store->mask |= _SION_FMODE_ANSI;
216 for (iter = _sion_flags_iter(store); iter->next != NULL; iter = iter->next) {
217 if ((!strcmp(iter->key,
"w")) || (!strcmp(iter->key,
"wb")) ||
218 (!strcmp(iter->key,
"bw"))) {
219 store->mask |= _SION_FMODE_WRITE;
221 else if ((!strcmp(iter->key,
"r")) || (!strcmp(iter->key,
"rb")) ||
222 (!strcmp(iter->key,
"br"))) {
223 store->mask |= _SION_FMODE_READ;
225 else if (!strcmp(iter->key,
"buffered")) {
226 store->mask |= _SION_FMODE_BUFFERED;
228 else if (!strcmp(iter->key,
"compress")) {
229 store->mask |= _SION_FMODE_COMPRESS;
231 else if (!strcmp(iter->key,
"collective")) {
232 store->mask |= _SION_FMODE_COLLECTIVE;
234 else if ((!strcmp(iter->key,
"collectivemerge")) ||
235 (!strcmp(iter->key,
"cmerge"))) {
236 store->mask |= _SION_FMODE_COLLECTIVE_MERGE;
238 else if (!strcmp(iter->key,
"keyval")) {
239 if ((!strcmp(iter->val,
"default")) || (!strcmp(iter->val,
"inline")) ||
240 (!strcmp(iter->val,
""))) {
241 store->mask |= _SION_FMODE_KEYVAL_INLINE;
243 else if (!strcmp(iter->key,
"meta")) {
244 store->mask |= _SION_FMODE_KEYVAL_META;
246 else if (!strcmp(iter->key,
"hash")) {
247 store->mask |= _SION_FMODE_KEYVAL_HASH;
249 else if (!strcmp(iter->key,
"none")) {
250 store->mask |= _SION_FMODE_KEYVAL_NONE;
252 else if (!strcmp(iter->key,
"unknown")) {
253 store->mask |= _SION_FMODE_KEYVAL_UNKNOWN;
256 else if (!strcmp(iter->key,
"endianness")) {
257 store->mask |= _SION_FMODE_ENDIANNESS_SET;
258 if (!strcmp(iter->val,
"big")) {
259 store->mask |= _SION_FMODE_ENDIANNESS_BIG;
262 else if (!strcmp(iter->key,
"posix")) {
263 store->mask |= _SION_FMODE_POSIX;
264 store->mask ^= store->mask & _SION_FMODE_ANSI;
266 else if (!strcmp(iter->key,
"ansi")) {
267 store->mask |= _SION_FMODE_ANSI;
268 store->mask ^= store->mask & _SION_FMODE_POSIX;
272 DPRINTFP((2, DFUNCTION, -1,
"leave (mask = %llx)\n", store->mask));
278 #define DFUNCTION "_sion_parse_flags" 291 char* saveptr = NULL;
292 const char* delim_tok =
",";
293 const char* delim_kv =
"=";
296 const int len = strlen(flags) + 1;
299 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
303 tmps = (
char*)malloc(len);
304 key = (
char*)malloc(len);
305 val = (
char*)malloc(len);
308 DPRINTF((32, DFUNCTION, -1,
"tmps = '%s'\n", tmps));
309 DPRINTF((32, DFUNCTION, -1,
"delim_tok = '%s'\n", delim_tok));
310 DPRINTF((32, DFUNCTION, -1,
"delim_kv = '%s'\n", delim_kv));
311 pch = strtok_r(tmps, delim_tok, &saveptr);
312 while (pch != NULL) {
313 span = strcspn(pch, delim_kv);
314 strncpy(key, pch, span);
316 if (span < strlen(pch)) {
317 strcpy(val, &pch[span + 1]);
322 DPRINTF((32, DFUNCTION, -1,
"key = '%s' | val = '%s'\n", key, val));
323 _sion_flags_add(store, key, val);
324 pch = strtok_r(NULL, delim_tok, &saveptr);
331 _sion_flags_update_mask(store);
333 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
_sion_flags_store * _sion_parse_flags(const char *flags)
Parse flags and return a flags store with key value pairs.
_sion_flags_entry * _sion_flags_add_entry(_sion_flags_entry *entry, const char *key, const char *val)
Create a flags entry.
_sion_flags_store * _sion_flags_create_store()
Create a flags entry.
_sion_flags_entry * _sion_flags_create_entry()
Create a flags entry.