- New netconf-specific uint32 parse functions

- Added failure handling to xpath traverse_canonical
- Started pagination cli code
This commit is contained in:
Olof hagsand 2021-08-30 14:43:24 +02:00
parent 390b0886ed
commit a046306270
16 changed files with 410 additions and 241 deletions

View file

@ -1841,3 +1841,111 @@ clixon_netconf_internal_error(cxobj *xerr,
done:
return retval;
}
/*! Parse string into uint32 and return netconf bad-element msg on error
*
* @param[in] name Name of attribute (for error msg)
* @param[in] valstr Value string to be parsed
* @param[in] defaultstr If given, default string which is accepted and sets value to 0
* @param[in,out] cbret Output buffer for internal RPC message if invalid
* @param[out] value Value if valid
* @retval -1 Error
* @retval 0 Invalid, cbret set
* @retval 1 OK
* @code
* char *name = "a";
* char *valstr = "322";
* char *defaultstr = "unbounded";
* cbuf *cbret = cbuf_new();
* uint32_t value = 0;
*
* if ((ret = netconf_parse_uint32(name, valstr, defaultstr, cbret, &value) < 0)
* goto err;
* if (ret == 0)
* // cbret contains netconf errmsg
* else
* // value contains uin32
* @endcode
*/
int
netconf_parse_uint32(char *name,
char *valstr,
char *defaultstr,
uint32_t defaultvalue,
cbuf *cbret,
uint32_t *value)
{
int retval = -1;
int ret;
char *reason = NULL;
if (valstr == NULL){
clicon_err(OE_NETCONF, EINVAL, "valstr is NULL");
goto done;
}
if (defaultstr && strcmp(valstr, defaultstr) == 0)
*value = defaultvalue;
else {
if ((ret = parse_uint32(valstr, value, &reason)) < 0){
clicon_err(OE_XML, errno, "parse_uint32");
goto done;
}
if (ret == 0){
if (netconf_bad_element(cbret, "application",
name, "Unrecognized value") < 0)
goto done;
goto fail;
}
}
retval = 1;
done:
if (reason)
free(reason);
return retval;
fail:
retval = 0;
goto done;
}
/*! Parse string into uint32 and return netconf bad-element msg on error xml variant
* @see netconf_parse_uint32_xml
*/
int
netconf_parse_uint32_xml(char *name,
char *valstr,
char *defaultstr,
uint32_t defaultvalue,
cxobj **xerr,
uint32_t *value)
{
int retval = -1;
int ret;
char *reason = NULL;
if (valstr == NULL){
clicon_err(OE_NETCONF, EINVAL, "valstr is NULL");
goto done;
}
if (defaultstr && strcmp(valstr, defaultstr) == 0)
*value = defaultvalue;
else {
if ((ret = parse_uint32(valstr, value, &reason)) < 0){
clicon_err(OE_XML, errno, "parse_uint32");
goto done;
}
if (ret == 0){
if (netconf_bad_element_xml(xerr, "application",
name, "Unrecognized value") < 0)
goto done;
goto fail;
}
}
retval = 1;
done:
if (reason)
free(reason);
return retval;
fail:
retval = 0;
goto done;
}