mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-07 15:47:01 +02:00
[MINOR] tools: add a get_std_op() function to parse operators
We already have several places where we use operators to compare values. Each time the parsing is done again. Let's have a central function for this.
This commit is contained in:
parent
bb695393da
commit
5b18020201
@ -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 <size-1> chars from <src> to <dst>. Last char is always
|
||||
* set to 0, unless <size> 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 <str> or < 0 if unknown */
|
||||
int get_std_op(const char *str);
|
||||
|
||||
#endif /* _COMMON_STANDARD_H */
|
||||
|
@ -1078,6 +1078,29 @@ const char *quote_arg(const char *ptr)
|
||||
return val;
|
||||
}
|
||||
|
||||
/* returns an operator among STD_OP_* for string <str> 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
|
||||
|
Loading…
Reference in New Issue
Block a user