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,
"buddy")) {
229 store->mask |= _SION_FMODE_BUDDY;
231 else if (!strcmp(iter->key,
"compress")) {
232 store->mask |= _SION_FMODE_COMPRESS;
234 else if (!strcmp(iter->key,
"collective")) {
235 store->mask |= _SION_FMODE_COLLECTIVE;
237 else if ((!strcmp(iter->key,
"collectivemerge")) ||
238 (!strcmp(iter->key,
"cmerge"))) {
239 store->mask |= _SION_FMODE_COLLECTIVE_MERGE;
241 else if (!strcmp(iter->key,
"keyval")) {
242 if ((!strcmp(iter->val,
"default")) || (!strcmp(iter->val,
"inline")) ||
243 (!strcmp(iter->val,
""))) {
244 store->mask |= _SION_FMODE_KEYVAL_INLINE;
246 else if (!strcmp(iter->key,
"meta")) {
247 store->mask |= _SION_FMODE_KEYVAL_META;
249 else if (!strcmp(iter->key,
"hash")) {
250 store->mask |= _SION_FMODE_KEYVAL_HASH;
252 else if (!strcmp(iter->key,
"none")) {
253 store->mask |= _SION_FMODE_KEYVAL_NONE;
255 else if (!strcmp(iter->key,
"unknown")) {
256 store->mask |= _SION_FMODE_KEYVAL_UNKNOWN;
259 else if (!strcmp(iter->key,
"endianness")) {
260 store->mask |= _SION_FMODE_ENDIANNESS_SET;
261 if (!strcmp(iter->val,
"big")) {
262 store->mask |= _SION_FMODE_ENDIANNESS_BIG;
265 else if (!strcmp(iter->key,
"posix")) {
266 store->mask |= _SION_FMODE_POSIX;
267 store->mask ^= store->mask & _SION_FMODE_ANSI;
269 else if (!strcmp(iter->key,
"ansi")) {
270 store->mask |= _SION_FMODE_ANSI;
271 store->mask ^= store->mask & _SION_FMODE_POSIX;
275 DPRINTFP((2, DFUNCTION, -1,
"leave (mask = %llx)\n", store->mask));
281 #define DFUNCTION "_sion_parse_flags" 294 char* saveptr = NULL;
295 const char* delim_tok =
",";
296 const char* delim_kv =
"=";
299 const int len = strlen(flags) + 1;
302 DPRINTFP((2, DFUNCTION, -1,
"enter\n"));
306 tmps = (
char*)malloc(len);
307 key = (
char*)malloc(len);
308 val = (
char*)malloc(len);
311 DPRINTF((32, DFUNCTION, -1,
"tmps = '%s'\n", tmps));
312 DPRINTF((32, DFUNCTION, -1,
"delim_tok = '%s'\n", delim_tok));
313 DPRINTF((32, DFUNCTION, -1,
"delim_kv = '%s'\n", delim_kv));
314 pch = strtok_r(tmps, delim_tok, &saveptr);
315 while (pch != NULL) {
316 span = strcspn(pch, delim_kv);
317 strncpy(key, pch, span);
319 if (span < strlen(pch)) {
320 strcpy(val, &pch[span + 1]);
325 DPRINTF((32, DFUNCTION, -1,
"key = '%s' | val = '%s'\n", key, val));
326 _sion_flags_add(store, key, val);
327 pch = strtok_r(NULL, delim_tok, &saveptr);
334 _sion_flags_update_mask(store);
336 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.