void test_iterate() { Key *key; key = keyNew ("user/test", KEY_END); exit_if_fail (key, "could not create new key"); succeed_if (keyRewindMeta(key) == 0, "Could not rewind empty key"); succeed_if (keyNextMeta(key) == 0, "Could get next meta name, even if it is empty"); succeed_if (keyCurrentMeta(key) == 0, "Could get next meta value, even if it is empty"); keySetMeta (key, "meta1", "meta_value"); succeed_if (keyRewindMeta(key) == 0, "Could not rewind key"); succeed_if (!strcmp(keyName(keyNextMeta(key)), "meta1"), "keyNextMeta does not work at 1. iteration"); succeed_if (!strcmp(keyValue(keyCurrentMeta(key)), "meta_value"), "keyCurrentMeta does not work at 1. iteration"); succeed_if (keyNextMeta(key) == 0, "Could get next meta name, even if it is empty at 2. iteration"); succeed_if (keyCurrentMeta(key) == 0, "Could get next meta value, even if it is empty at 2. iteration"); succeed_if (keyNextMeta(key) == 0, "Could get next meta name, even if it is empty at 3. iteration"); succeed_if (keyCurrentMeta(key) == 0, "Could get next meta value, even if it is empty at 3. iteration"); succeed_if (keyNextMeta(key) == 0, "Could get next meta name, even if it is empty at 4. iteration"); succeed_if (keyCurrentMeta(key) == 0, "Could get next meta value, even if it is empty at 4. iteration"); keyDel (key); }
static int handleErrors (Key * parentKey, KeySet * ks, Key * key, Key * specKey, ConflictHandling * ch, Direction dir) { cursor_t cursor = ksGetCursor (ks); int ret = 0; ConflictHandling * localCh = elektraMalloc (sizeof (ConflictHandling)); memcpy (localCh, ch, sizeof (ConflictHandling)); parseLocalConfig (specKey, localCh, dir); Key * parentLookup = keyDup (key); keySetBaseName (parentLookup, 0); Key * parent = ksLookup (ks, parentLookup, KDB_O_NONE); keyDel (parentLookup); keyRewindMeta (parent); Conflict conflict; Key * meta; while (keyNextMeta (parent) != NULL) { meta = (Key *) keyCurrentMeta (parent); conflict = getConflict (meta); if (conflict != NAC) { ret |= handleError (parentKey, parent, specKey, meta, conflict, localCh); keySetMeta (parent, keyName (meta), 0); } else if (!strncmp (keyName (meta), "conflict/#", 10) || !strncmp (keyName (meta), "conflict/invalid/hasmember/#", 28)) { keySetMeta (parent, keyName (meta), 0); } } keyRewindMeta (key); while (keyNextMeta (key) != NULL) { meta = (Key *) keyCurrentMeta (key); conflict = getConflict (meta); if (conflict != NAC) { ret |= handleError (parentKey, key, specKey, meta, conflict, localCh); keySetMeta (key, keyName (meta), 0); } else if (!strncmp (keyName (meta), "conflict/#", 10) || !strncmp (keyName (meta), "conflict/invalid/hasmember/#", 28)) { keySetMeta (key, keyName (meta), 0); } } elektraFree (localCh); ksSetCursor (ks, cursor); return ret; }