/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#include <fnmatch.h>
+
#include "compare-operator.h"
#include "string-util.h"
return -EINVAL;
}
}
+
+int version_or_fnmatch_compare(
+ CompareOperator op,
+ const char *a,
+ const char *b) {
+
+ switch (op) {
+
+ case COMPARE_FNMATCH_EQUAL:
+ return fnmatch(b, a, FNM_EXTMATCH) != FNM_NOMATCH;
+
+ case COMPARE_FNMATCH_UNEQUAL:
+ return fnmatch(b, a, FNM_EXTMATCH) == FNM_NOMATCH;
+
+ case _COMPARE_OPERATOR_ORDER_FIRST..._COMPARE_OPERATOR_ORDER_LAST:
+ return test_order(strverscmp_improved(a, b), op);
+
+ default:
+ return -EINVAL;
+ }
+}
CompareOperator parse_compare_operator(const char **s, bool allow_fnmatch);
int test_order(int k, CompareOperator op);
+
+int version_or_fnmatch_compare(CompareOperator op, const char *a, const char *b);
delete_trailing_chars(actual_value, WHITESPACE);
/* Finally compare actual and expected value */
- if (operator == COMPARE_FNMATCH_EQUAL)
- return fnmatch(expected_value, actual_value, FNM_EXTMATCH) != FNM_NOMATCH;
- if (operator == COMPARE_FNMATCH_UNEQUAL)
- return fnmatch(expected_value, actual_value, FNM_EXTMATCH) == FNM_NOMATCH;
- return test_order(strverscmp_improved(actual_value, expected_value), operator);
+ return version_or_fnmatch_compare(operator, actual_value, expected_value);
}
static int condition_test_firmware(Condition *c, char **env) {