Esempio n. 1
0
/*
 * 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;
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
static int keyCmpOrderWrapper(const void *a, const void *b)
{
	return elektraKeyCmpOrder(*((const Key **)a), *((const Key **)b));
}