#include "compare-operator.h"
#include "string-util.h"
-CompareOperator parse_compare_operator(const char **s, bool allow_fnmatch) {
+CompareOperator parse_compare_operator(const char **s, CompareOperatorParseFlags flags) {
static const char *const prefix[_COMPARE_OPERATOR_MAX] = {
[COMPARE_FNMATCH_EQUAL] = "=$",
[COMPARE_FNMATCH_UNEQUAL] = "!=$",
e = startswith(*s, prefix[i]);
if (e) {
- if (!allow_fnmatch && COMPARE_OPERATOR_IS_FNMATCH(i))
- break;
+ if (!FLAGS_SET(flags, COMPARE_ALLOW_FNMATCH) && COMPARE_OPERATOR_IS_FNMATCH(i))
+ return _COMPARE_OPERATOR_INVALID;
+
*s = e;
return i;
}
return c >= _COMPARE_OPERATOR_ORDER_FIRST && c <= _COMPARE_OPERATOR_ORDER_LAST;
}
-CompareOperator parse_compare_operator(const char **s, bool allow_fnmatch);
+typedef enum CompareOperatorParseFlags {
+ COMPARE_ALLOW_FNMATCH = 1 << 0,
+} CompareOperatorParseFlags;
+
+CompareOperator parse_compare_operator(const char **s, CompareOperatorParseFlags flags);
int test_order(int k, CompareOperator op);
break;
s = strstrip(word);
- operator = parse_compare_operator(&s, /* allow_fnmatch= */ false);
+ operator = parse_compare_operator(&s, 0);
if (operator >= 0) {
s += strspn(s, WHITESPACE);
if (isempty(s)) {
"Failed to parse parameter, key/value format expected: %m");
/* Do not allow whitespace after the separator, as that's not a valid os-release format */
- operator = parse_compare_operator(&word, /* allow_fnmatch= */ false);
+ operator = parse_compare_operator(&word, 0);
if (operator < 0 || isempty(word) || strchr(WHITESPACE, *word) != NULL)
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse parameter, key/value format expected: %m");
m = physical_memory();
p = c->parameter;
- operator = parse_compare_operator(&p, /* allow_fnmatch= */ false);
+ operator = parse_compare_operator(&p, 0);
if (operator < 0)
operator = COMPARE_GREATER_OR_EQUAL; /* default to >= check, if nothing is specified. */
return log_debug_errno(n, "Failed to determine CPUs in affinity mask: %m");
p = c->parameter;
- operator = parse_compare_operator(&p, /* allow_fnmatch= */ false);
+ operator = parse_compare_operator(&p, 0);
if (operator < 0)
operator = COMPARE_GREATER_OR_EQUAL; /* default to >= check, if nothing is specified. */
delete_trailing_chars(field, WHITESPACE);
/* Parse operator */
- operator = parse_compare_operator(&expression, /* allow_fnmatch= */ true);
+ operator = parse_compare_operator(&expression, COMPARE_ALLOW_FNMATCH);
if (operator < 0)
return operator;