/* * Wrapper for the function comparing by order metadata. As * qsort is not stable returning 0 on missing order may * mess up the original order. */ int elektraKeyCmpOrderWrapper (const void * a, const void * b) { const Key ** ka = (const Key **)a; const Key ** kb = (const Key **)b; int orderResult = elektraKeyCmpOrder (*ka, *kb); /* comparing the order meta could not order the keys * revert to comparing the names instead */ if (orderResult == 0) return keyCmp (*ka, *kb); return orderResult; }
static void test_cmpOrder() { Key *k1 = keyNew ("user/a", KEY_META, "order", "20", KEY_END); Key *k2 = keyNew ("user/b", KEY_META, "order", "10", KEY_END); succeed_if (elektraKeyCmpOrder(0, 0) == 0, "null keys are not equal"); succeed_if (elektraKeyCmpOrder(k1, 0) == 1, "not null key is not greater than null key"); succeed_if (elektraKeyCmpOrder(0, k1) == -1, "null key is not smaller than not null key"); succeed_if (elektraKeyCmpOrder(k1, k2) > 0, "user/a is not greater than user/b"); succeed_if (elektraKeyCmpOrder(k2, k1) < 0, "user/b is not smaller than user/a"); keySetMeta(k2, "order", "20"); succeed_if (elektraKeyCmpOrder(k1, k2) == 0, "keys with same order are not equal"); succeed_if (elektraKeyCmpOrder(k2, k1) == 0, "keys with same order are not equal"); keySetMeta(k2, "order", 0); succeed_if (elektraKeyCmpOrder(k1, k2) > 0, "key with metadata is not greater than key without"); succeed_if (elektraKeyCmpOrder(k2, k1) < 0, "key with metadata is not greater than key without"); keySetMeta(k1, "order", 0); succeed_if (elektraKeyCmpOrder(k1, k2) == 0, "keys without metadata are not equal"); succeed_if (elektraKeyCmpOrder(k2, k1) == 0, "keys without metadata are not equal"); keyDel (k1); keyDel (k2); }
static int keyCmpOrderWrapper(const void *a, const void *b) { return elektraKeyCmpOrder(*((const Key **)a), *((const Key **)b)); }