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;
271 store->mask ^= store->mask & _SION_FMODE_SIONFWD;
273 else if (!strcmp(iter->key,
"ansi")) {
274 store->mask |= _SION_FMODE_ANSI;
275 store->mask ^= store->mask & _SION_FMODE_POSIX;
276 store->mask ^= store->mask & _SION_FMODE_SIONFWD;
278 else if (!strcmp(iter->key,
"sionfwd")) {
279 store->mask |= _SION_FMODE_SIONFWD;
280 store->mask ^= store->mask & _SION_FMODE_ANSI;
281 store->mask ^= store->mask & _SION_FMODE_POSIX;
285 DPRINTFP((2, DFUNCTION, -1,
"leave (mask = %llx)\n", store->mask));
291 #define DFUNCTION "_sion_parse_flags"
304 char* saveptr = NULL;
305 const char* delim_tok =
",";
306 const char* delim_kv =
"=";
309 const int len = strlen(flags) + 1;
312 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
316 tmps = (
char*)malloc(len);
317 key = (
char*)malloc(len);
318 val = (
char*)malloc(len);
321 DPRINTF((32, DFUNCTION, -1,
"tmps = '%s'\n", tmps));
322 DPRINTF((32, DFUNCTION, -1,
"delim_tok = '%s'\n", delim_tok));
323 DPRINTF((32, DFUNCTION, -1,
"delim_kv = '%s'\n", delim_kv));
324 pch = strtok_r(tmps, delim_tok, &saveptr);
325 while (pch != NULL) {
326 span = strcspn(pch, delim_kv);
327 strncpy(key, pch, span);
329 if (span < strlen(pch)) {
330 strcpy(val, &pch[span + 1]);
335 DPRINTF((32, DFUNCTION, -1,
"key = '%s' | val = '%s'\n", key, val));
336 _sion_flags_add(store, key, val);
337 pch = strtok_r(NULL, delim_tok, &saveptr);
344 _sion_flags_update_mask(store);
346 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));