Пример #1
0
static void test_skip_leading_chars(void) {
        char input1[] = " \n \r k \n \r ",
                input2[] = "kkkkthiskkkiskkkaktestkkk",
                input3[] = "abcdef";

        assert_se(streq(skip_leading_chars(input1, WHITESPACE), "k \n \r "));
        assert_se(streq(skip_leading_chars(input2, "k"), "thiskkkiskkkaktestkkk"));
        assert_se(streq(skip_leading_chars(input2, "tk"), "hiskkkiskkkaktestkkk"));
        assert_se(streq(skip_leading_chars(input3, WHITESPACE), "abcdef"));
        assert_se(streq(skip_leading_chars(input3, "bcaef"), "def"));
}
Пример #2
0
static int condition_test_kernel_version(Condition *c) {
        enum {
                /* Listed in order of checking. Note that some comparators are prefixes of others, hence the longest
                 * should be listed first. */
                LOWER_OR_EQUAL,
                GREATER_OR_EQUAL,
                LOWER,
                GREATER,
                EQUAL,
                _ORDER_MAX,
        };

        static const char *const prefix[_ORDER_MAX] = {
                [LOWER_OR_EQUAL] = "<=",
                [GREATER_OR_EQUAL] = ">=",
                [LOWER] = "<",
                [GREATER] = ">",
                [EQUAL] = "=",
        };
        const char *p = NULL;
        struct utsname u;
        size_t i;
        int k;

        assert(c);
        assert(c->parameter);
        assert(c->type == CONDITION_KERNEL_VERSION);

        assert_se(uname(&u) >= 0);

        for (i = 0; i < _ORDER_MAX; i++) {
                p = startswith(c->parameter, prefix[i]);
                if (p)
                        break;
        }

        /* No prefix? Then treat as glob string */
        if (!p)
                return fnmatch(skip_leading_chars(c->parameter, NULL), u.release, 0) == 0;

        k = str_verscmp(u.release, skip_leading_chars(p, NULL));

        switch (i) {

        case LOWER:
                return k < 0;

        case LOWER_OR_EQUAL:
                return k <= 0;

        case EQUAL:
                return k == 0;

        case GREATER_OR_EQUAL:
                return k >= 0;

        case GREATER:
                return k > 0;

        default:
                assert_not_reached("Can't compare");
        }
}