diff --git a/include/common/standard.h b/include/common/standard.h index fcfb52f8b..cb5a3ec56 100644 --- a/include/common/standard.h +++ b/include/common/standard.h @@ -42,6 +42,15 @@ * power of 2, and 0 otherwise */ #define POWEROF2(x) (((x) & ((x)-1)) == 0) +/* operators to compare values. They're ordered that way so that the lowest bit + * serves as a negation for the test and contains all tests that are not equal. + */ +enum { + STD_OP_LE = 0, STD_OP_GT = 1, + STD_OP_EQ = 2, STD_OP_NE = 3, + STD_OP_GE = 4, STD_OP_LT = 5, +}; + /* * copies at most chars from to . Last char is always * set to 0, unless is 0. The number of chars copied is returned @@ -407,4 +416,7 @@ int buf2ip(const char *buf, size_t len, struct in_addr *dst); */ const char *quote_arg(const char *ptr); +/* returns an operator among STD_OP_* for string or < 0 if unknown */ +int get_std_op(const char *str); + #endif /* _COMMON_STANDARD_H */ diff --git a/src/standard.c b/src/standard.c index 12954b0c7..8aaa594da 100644 --- a/src/standard.c +++ b/src/standard.c @@ -1078,6 +1078,29 @@ const char *quote_arg(const char *ptr) return val; } +/* returns an operator among STD_OP_* for string or < 0 if unknown */ +int get_std_op(const char *str) +{ + int ret = -1; + + if (*str == 'e' && str[1] == 'q') + ret = STD_OP_EQ; + else if (*str == 'n' && str[1] == 'e') + ret = STD_OP_NE; + else if (*str == 'l') { + if (str[1] == 'e') ret = STD_OP_LE; + else if (str[1] == 't') ret = STD_OP_LT; + } + else if (*str == 'g') { + if (str[1] == 'e') ret = STD_OP_GE; + else if (str[1] == 't') ret = STD_OP_GT; + } + + if (ret == -1 || str[2] != '\0') + return -1; + return ret; +} + /* * Local variables: * c-indent-level: 8