Source
static zbx_mock_error_t ts_get_time(const char *text, int *hours, int *minutes, int *seconds, const char **pnext)
/*
** Copyright (C) 2001-2025 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/>.
**/
/* output formats */
/******************************************************************************
* *
* Purpose: finds the next character after numeric time component *
* *
* Parameters: text - [IN] the text *
* *
* Return value: text after the time component *
* *
* Comments: If the first character is not a digit the source text is *
* returned. *
* *
******************************************************************************/
static const char *ts_get_component_end(const char *text)
{
while (0 != isdigit(*text))
text++;
return text;
}
/******************************************************************************
* *
* Purpose: parses year, month and day from date component having *
* YYYY-MM-DD format *
* *
* Parameters: text - [IN] the text *
* year - [OUT] the year *
* month - [OUT] the month *
* day - [OUT] the day *
* pnext - [OUT] text after date component *
* *
* Return value: ZBX_MOCK_SUCCESS - the date was parsed successfully *
* ZBX_MOCK_NOT_A_TIMESTAMP - invalid date format *
* *
* Comments: The year, month, day limits are not validated. *
* *
******************************************************************************/
static zbx_mock_error_t ts_get_date(const char *text, int *year, int *month, int *day, const char **pnext)
{
const char *year_end, *month_end, *day_end;
int value_year, value_month, value_day;
year_end = ts_get_component_end(text);
if (year_end - text != 4 || '-' != *year_end)
return ZBX_MOCK_NOT_A_TIMESTAMP;
month_end = ts_get_component_end(year_end + 1);
if (2 > month_end - year_end || 3 < month_end - year_end || '-' != *month_end)
return ZBX_MOCK_NOT_A_TIMESTAMP;
day_end = ts_get_component_end(month_end + 1);
if (2 > day_end - month_end || 3 < day_end - month_end)
return ZBX_MOCK_NOT_A_TIMESTAMP;
value_year = atoi(text);
if (1970 > value_year || 2038 < value_year)
return ZBX_MOCK_NOT_A_TIMESTAMP;