Source
static int eval_parse_expression(zbx_eval_context_t *ctx, const char *expression, zbx_uint64_t rules, char **error)
/*
** Copyright (C) 2001-2024 Zabbix SIA
**
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
**
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
**
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
**/
ZBX_VECTOR_IMPL(eval_token, zbx_eval_token_t)
static int is_whitespace(char c)
{
return 0 != isspace((unsigned char)c) ? SUCCEED : FAIL;
}
/******************************************************************************
* *
* Purpose: finds number of following whitespace characters *
* *
* Parameters: ctx - [IN] evaluation context *
* pos - [IN] starting position *
* *
* Return value: number of whitespace characters found *
* *
******************************************************************************/
static size_t eval_get_whitespace_len(zbx_eval_context_t *ctx, size_t pos)
{
const char *ptr = ctx->expression + pos;
while (SUCCEED == is_whitespace(*ptr))
ptr++;
return ptr - ctx->expression - pos;
}
/******************************************************************************
* *
* Purpose: updates constant variable index in trigger expression *
* *
* Parameters: ctx - [IN] evaluation context *
* token - [IN] variable token *
* *
* Comments: The index is used to refer constant values by using $<N> in *
* trigger names. Function arguments are excluded. *
* *
******************************************************************************/
static void eval_update_const_variable(zbx_eval_context_t *ctx, zbx_eval_token_t *token)
{
zbx_variant_set_none(&token->value);