- New netconf-specific uint32 parse functions
- Added failure handling to xpath traverse_canonical - Started pagination cli code
This commit is contained in:
parent
390b0886ed
commit
a046306270
16 changed files with 410 additions and 241 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue