Stricter incoming RPC sanity checking, error messages may have changed
This commit is contained in:
parent
f9998c441c
commit
ac5637a46a
30 changed files with 163 additions and 99 deletions
|
|
@ -1304,14 +1304,12 @@ xml_merge1(cxobj *x0, /* the target */
|
|||
char *x1bstr; /* mod body string */
|
||||
yang_stmt *yc; /* yang child */
|
||||
cbuf *cbr = NULL; /* Reason buffer */
|
||||
#ifdef XML_MERGE_TWO_ROUNDS
|
||||
int i;
|
||||
struct {
|
||||
cxobj *w_x0c;
|
||||
cxobj *w_x1c;
|
||||
yang_stmt *w_yc;
|
||||
} *second_wave = NULL;
|
||||
#endif
|
||||
|
||||
assert(x1 && xml_type(x1) == CX_ELMNT);
|
||||
assert(y0);
|
||||
|
|
@ -1347,13 +1345,11 @@ xml_merge1(cxobj *x0, /* the target */
|
|||
}
|
||||
if (assign_namespaces(x1, x0, x0p) < 0)
|
||||
goto done;
|
||||
#ifdef XML_MERGE_TWO_ROUNDS
|
||||
if ((second_wave = calloc(xml_child_nr(x1), sizeof(*second_wave))) == NULL){
|
||||
clicon_err(OE_UNIX, errno, "calloc");
|
||||
goto done;
|
||||
}
|
||||
i = 0;
|
||||
#endif
|
||||
/* Loop through children of the modification tree */
|
||||
x1c = NULL;
|
||||
while ((x1c = xml_child_each(x1, x1c, CX_ELMNT)) != NULL) {
|
||||
|
|
@ -1377,7 +1373,6 @@ xml_merge1(cxobj *x0, /* the target */
|
|||
x0c = NULL;
|
||||
if (yc && match_base_child(x0, x1c, yc, &x0c) < 0)
|
||||
goto done;
|
||||
#ifdef XML_MERGE_TWO_ROUNDS
|
||||
/* Save x0c, x1c, yc and merge in second wave, so that x1c entries "interfer"
|
||||
* with itself, ie that later searches are among earlier objects already added
|
||||
* to x0 */
|
||||
|
|
@ -1385,14 +1380,7 @@ xml_merge1(cxobj *x0, /* the target */
|
|||
second_wave[i].w_x1c = x1c;
|
||||
second_wave[i].w_yc = yc;
|
||||
i++;
|
||||
#else
|
||||
if (xml_merge1(x0c, yc, x0, x1c, reason) < 0)
|
||||
goto done;
|
||||
if (*reason != NULL)
|
||||
goto ok;
|
||||
#endif
|
||||
} /* while */
|
||||
#ifdef XML_MERGE_TWO_ROUNDS
|
||||
/* Second run where actual merging is done
|
||||
* Loop through children of the modification tree */
|
||||
x1c = NULL;
|
||||
|
|
@ -1408,7 +1396,6 @@ xml_merge1(cxobj *x0, /* the target */
|
|||
goto ok;
|
||||
i++;
|
||||
}
|
||||
#endif
|
||||
if (xml_parent(x0) == NULL &&
|
||||
xml_insert(x0p, x0, INS_LAST, NULL, NULL) < 0)
|
||||
goto done;
|
||||
|
|
@ -1416,10 +1403,8 @@ xml_merge1(cxobj *x0, /* the target */
|
|||
ok:
|
||||
retval = 0;
|
||||
done:
|
||||
#ifdef XML_MERGE_TWO_ROUNDS
|
||||
if (second_wave)
|
||||
free(second_wave);
|
||||
#endif
|
||||
if (cbr)
|
||||
cbuf_free(cbr);
|
||||
return retval;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue