Added xml_template_apply
This commit is contained in:
parent
9bc60abe2e
commit
b551e9e5c7
4 changed files with 134 additions and 0 deletions
|
|
@ -2104,3 +2104,69 @@ clixon_compare_xmls(cxobj *xc1,
|
|||
unlink(filename2);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*! XML apply function: replace ${} variables with values from cligen variable vector
|
||||
*
|
||||
* @param[in] x XML node
|
||||
* @param[in] arg cvv: vector of name/value pairs
|
||||
* @retval -1 Error, aborted at first error encounter, return -1 to end user
|
||||
* @retval 0 OK, continue
|
||||
* @retval 1 Abort, dont continue with others, return 1 to end user
|
||||
* @retval 2 Locally abort this subtree, continue with others
|
||||
*/
|
||||
int
|
||||
xml_template_apply(cxobj *x,
|
||||
void *arg)
|
||||
{
|
||||
int retval = -1;
|
||||
cvec *cvv = (cvec *)arg;
|
||||
cxobj *xb;
|
||||
char *b;
|
||||
char *var;
|
||||
char *varname;
|
||||
char *varval;
|
||||
cbuf *cb = NULL;
|
||||
int i;
|
||||
char **vec = NULL;
|
||||
int nvec = 0;
|
||||
cg_var *cv = NULL;
|
||||
|
||||
if ((xb = xml_body_get(x)) != NULL &&
|
||||
(b = xml_value(xb)) != NULL){
|
||||
if (clixon_strsep2(b, "${", "}", &vec, &nvec) < 0)
|
||||
goto done;
|
||||
assert(nvec%2 == 1); /* Must be odd */
|
||||
if (nvec > 1){
|
||||
if ((cb = cbuf_new()) == NULL){
|
||||
clixon_err(OE_UNIX, errno, "cbuf_new");
|
||||
goto done;
|
||||
}
|
||||
i = 0;
|
||||
while (i < nvec){
|
||||
cprintf(cb, "%s", vec[i++]);
|
||||
if (i == nvec)
|
||||
break;
|
||||
var = vec[i++];
|
||||
assert(i < nvec); /* Must be odd */
|
||||
cv = NULL;
|
||||
while ((cv = cvec_each(cvv, cv)) != NULL){
|
||||
if ((varname = cv_name_get(cv)) == NULL)
|
||||
continue;
|
||||
if (strcmp(varname, var) != 0)
|
||||
continue;
|
||||
varval = cv_string_get(cv);
|
||||
cprintf(cb, "%s", varval);
|
||||
break;
|
||||
}
|
||||
}
|
||||
xml_value_set(xb, cbuf_get(cb));
|
||||
}
|
||||
}
|
||||
retval = 0;
|
||||
done:
|
||||
if (vec)
|
||||
free(vec);
|
||||
if (cb)
|
||||
cbuf_free(cb);
|
||||
return retval;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue