15 #define _XOPEN_SOURCE 700 26 #define DFUNCTION "_sion_flags_init_entry" 29 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
35 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
39 #define DFUNCTION "_sion_flags_create_entry" 50 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
53 _sion_flags_init_entry(new_entry);
55 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
61 #define DFUNCTION "_sion_flags_destroy_entry" 64 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
71 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
75 #define DFUNCTION "_sion_flags_iter" 78 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
79 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
85 #define DFUNCTION "_sion_flags_init_store" 88 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
91 store->current = store->root;
93 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
97 #define DFUNCTION "_sion_flags_create_store" 108 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
111 _sion_flags_init_store(new_store);
113 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
119 #define DFUNCTION "_sion_flags_destroy_store" 125 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
127 entry = _sion_flags_iter(*store);
129 while (entry != NULL) {
131 _sion_flags_destroy_entry(&entry);
138 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
142 #define DFUNCTION "_sion_flags_add_entry" 159 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
162 entry->key = (
char*)malloc(strlen(key) + 1);
163 entry->val = (
char*)malloc(strlen(val) + 1);
165 strcpy(entry->key, key);
166 strcpy(entry->val, val);
167 entry->next = new_entry;
169 DPRINTFP((2, DFUNCTION, -1,
"leave (entry->key = %s, entry->val = %s\n",
170 entry->key, entry->val));
176 #define DFUNCTION "_sion_flags_add" 181 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
185 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
189 #define DFUNCTION "_sion_flags_get" 194 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
196 for (iter = _sion_flags_iter(store); iter->next != NULL; iter = iter->next) {
197 if (!strcmp(iter->key, key)) {
198 DPRINTFP((2, DFUNCTION, -1,
"leave (key in store)\n"));
203 DPRINTFP((2, DFUNCTION, -1,
"leave (key not in store)\n"));
209 #define DFUNCTION "_sion_flags_update_mask" 214 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
217 store->mask |= _SION_FMODE_ANSI;
219 for (iter = _sion_flags_iter(store); iter->next != NULL; iter = iter->next) {
220 if ((!strcmp(iter->key,
"w")) || (!strcmp(iter->key,
"wb")) ||
221 (!strcmp(iter->key,
"bw"))) {
222 store->mask |= _SION_FMODE_WRITE;
224 else if ((!strcmp(iter->key,
"r")) || (!strcmp(iter->key,
"rb")) ||
225 (!strcmp(iter->key,
"br"))) {
226 store->mask |= _SION_FMODE_READ;
228 else if (!strcmp(iter->key,
"buffered")) {
229 store->mask |= _SION_FMODE_BUFFERED;
231 else if (!strcmp(iter->key,
"buddy")) {
232 store->mask |= _SION_FMODE_BUDDY;
234 else if (!strcmp(iter->key,
"compress")) {
235 store->mask |= _SION_FMODE_COMPRESS;
237 else if (!strcmp(iter->key,
"collective")) {
238 store->mask |= _SION_FMODE_COLLECTIVE;
240 else if ((!strcmp(iter->key,
"collectivemerge")) ||
241 (!strcmp(iter->key,
"cmerge"))) {
242 store->mask |= _SION_FMODE_COLLECTIVE_MERGE;
244 else if (!strcmp(iter->key,
"keyval")) {
245 if ((!strcmp(iter->val,
"default")) || (!strcmp(iter->val,
"inline")) ||
246 (!strcmp(iter->val,
""))) {
247 store->mask |= _SION_FMODE_KEYVAL_INLINE;
249 else if (!strcmp(iter->key,
"meta")) {
250 store->mask |= _SION_FMODE_KEYVAL_META;
252 else if (!strcmp(iter->key,
"hash")) {
253 store->mask |= _SION_FMODE_KEYVAL_HASH;
255 else if (!strcmp(iter->key,
"none")) {
256 store->mask |= _SION_FMODE_KEYVAL_NONE;
258 else if (!strcmp(iter->key,
"unknown")) {
259 store->mask |= _SION_FMODE_KEYVAL_UNKNOWN;
262 else if (!strcmp(iter->key,
"endianness")) {
263 store->mask |= _SION_FMODE_ENDIANNESS_SET;
264 if (!strcmp(iter->val,
"big")) {
265 store->mask |= _SION_FMODE_ENDIANNESS_BIG;
268 else if (!strcmp(iter->key,
"posix")) {
269 store->mask |= _SION_FMODE_POSIX;
270 store->mask ^= store->mask & _SION_FMODE_ANSI;
272 else if (!strcmp(iter->key,
"ansi")) {
273 store->mask |= _SION_FMODE_ANSI;
274 store->mask ^= store->mask & _SION_FMODE_POSIX;
278 DPRINTFP((2, DFUNCTION, -1,
"leave (mask = %llx)\n", store->mask));
284 #define DFUNCTION "_sion_parse_flags" 297 char* saveptr = NULL;
298 const char* delim_tok =
",";
299 const char* delim_kv =
"=";
302 const int len = strlen(flags) + 1;
305 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
309 tmps = (
char*)malloc(len);
310 key = (
char*)malloc(len);
311 val = (
char*)malloc(len);
314 DPRINTF((32, DFUNCTION, -1,
"tmps = '%s'\n", tmps));
315 DPRINTF((32, DFUNCTION, -1,
"delim_tok = '%s'\n", delim_tok));
316 DPRINTF((32, DFUNCTION, -1,
"delim_kv = '%s'\n", delim_kv));
317 pch = strtok_r(tmps, delim_tok, &saveptr);
318 while (pch != NULL) {
319 span = strcspn(pch, delim_kv);
320 strncpy(key, pch, span);
322 if (span < strlen(pch)) {
323 strcpy(val, &pch[span + 1]);
328 DPRINTF((32, DFUNCTION, -1,
"key = '%s' | val = '%s'\n", key, val));
329 _sion_flags_add(store, key, val);
330 pch = strtok_r(NULL, delim_tok, &saveptr);
337 _sion_flags_update_mask(store);
339 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
_sion_flags_entry * _sion_flags_create_entry(void)
Create a flags entry.
_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(void)
Create a flags entry.