Changes due to CLIgen removal of expand-prepend code

This commit is contained in:
Olof hagsand 2023-07-28 16:27:47 +02:00
parent 05c082b202
commit 7577245077
3 changed files with 60 additions and 36 deletions

View file

@ -377,7 +377,7 @@ cli_dbxml(clicon_handle h,
{ {
int retval = -1; int retval = -1;
cbuf *api_path_fmt_cb = NULL; /* xml key format */ cbuf *api_path_fmt_cb = NULL; /* xml key format */
char *api_path_fmt; /* xml key format */ char *api_path_fmt;
char *api_path_fmt01 = NULL; char *api_path_fmt01 = NULL;
char *api_path = NULL; char *api_path = NULL;
cbuf *cb = NULL; cbuf *cb = NULL;
@ -392,7 +392,6 @@ cli_dbxml(clicon_handle h,
char *mtpoint = NULL; char *mtpoint = NULL;
yang_stmt *yspec0 = NULL; yang_stmt *yspec0 = NULL;
int argc = 0; int argc = 0;
int i;
/* Top-level yspec */ /* Top-level yspec */
if ((yspec0 = clicon_dbspec_yang(h)) == NULL){ if ((yspec0 = clicon_dbspec_yang(h)) == NULL){
@ -403,22 +402,11 @@ cli_dbxml(clicon_handle h,
clicon_err(OE_UNIX, errno, "cbuf_new"); clicon_err(OE_UNIX, errno, "cbuf_new");
goto done; goto done;
} }
/* Iterate through all api_path_fmt:s, assume they start with / */ /* Concatenate all argv strings to a sinle string */
for (argc=0; argc<cvec_len(argv); argc++){ if (cvec_concat_cb(argv, api_path_fmt_cb) < 0)
cv = cvec_i(argv, argc);
str = cv_string_get(cv);
if (str[0] != '/')
break;
}
if (argc == 0){
clicon_err(OE_PLUGIN, EINVAL, "No <api_path_fmt> in argv");
goto done; goto done;
}
/* Append a api_path_fmt from sub-parts */
for (i=argc-1; i>=0; i--){
cprintf(api_path_fmt_cb, "%s", cv_string_get(cvec_i(argv, i)));
}
api_path_fmt = cbuf_get(api_path_fmt_cb); api_path_fmt = cbuf_get(api_path_fmt_cb);
argc = cvec_len(argv);
if (cvec_len(argv) > argc){ if (cvec_len(argv) > argc){
cv = cvec_i(argv, argc++); cv = cvec_i(argv, argc++);
str = cv_string_get(cv); str = cv_string_get(cv);
@ -1654,6 +1642,45 @@ cvec_append(cvec *cvv0,
return cvv2; return cvv2;
} }
/*! Concatenate all strings in a cvec into a single string
*
* @param[in] cvv Input vector
* @param[out] appstr Concatenated string as existing cbuf
*/
int
cvec_concat_cb(cvec *cvv,
cbuf *cb)
{
int retval = -1;
int argc;
cg_var *cv;
char *str;
int i;
if (cb == NULL){
clicon_err(OE_PLUGIN, EINVAL, "cb is NULL");
goto done;
}
/* Iterate through all api_path_fmt:s, assume they start with / */
for (argc=0; argc<cvec_len(cvv); argc++){
cv = cvec_i(cvv, argc);
str = cv_string_get(cv);
if (str[0] != '/')
break;
}
if (argc == 0){
clicon_err(OE_PLUGIN, EINVAL, "No <api_path_fmt> in cvv");
goto done;
}
/* Append a api_path_fmt from sub-parts */
for (i=argc-1; i>=0; i--){
cprintf(cb, "%s", cv_string_get(cvec_i(cvv, i)));
}
retval = 0;
done:
return retval;
}
/*! Process control as defined by clixon-lib API /*! Process control as defined by clixon-lib API
* *
* @param[in] h Clicon handle * @param[in] h Clicon handle

View file

@ -43,6 +43,7 @@ void cli_signal_block(clicon_handle h);
void cli_signal_unblock(clicon_handle h); void cli_signal_unblock(clicon_handle h);
int mtpoint_paths(yang_stmt *yspec0, char *mtpoint, char *api_path_fmt1, char **api_path_fmt01); int mtpoint_paths(yang_stmt *yspec0, char *mtpoint, char *api_path_fmt1, char **api_path_fmt01);
cvec *cvec_append(cvec *cvv0, cvec *cvv1); cvec *cvec_append(cvec *cvv0, cvec *cvv1);
int cvec_concat_cb(cvec *cvv, cbuf *cb);
/* If you do not find a function here it may be in clixon_cli_api.h which is /* If you do not find a function here it may be in clixon_cli_api.h which is
the external API */ the external API */

View file

@ -194,7 +194,8 @@ expand_dbvar(void *h,
cvec *helptexts) cvec *helptexts)
{ {
int retval = -1; int retval = -1;
char *api_path_fmt = NULL; cbuf *api_path_fmt_cb = NULL;
char *api_path_fmt;
char *api_path = NULL; char *api_path = NULL;
char *api_path_fmt01 = NULL; char *api_path_fmt01 = NULL;
char *dbstr; char *dbstr;
@ -226,8 +227,8 @@ expand_dbvar(void *h,
cvec *nsc0 = NULL; cvec *nsc0 = NULL;
char *str; char *str;
int grouping_treeref; int grouping_treeref;
cbuf *cbprepend; cvec *callback_cvv;
if (argv == NULL || (cvec_len(argv) != 2 && cvec_len(argv) != 3)){ if (argv == NULL || (cvec_len(argv) != 2 && cvec_len(argv) != 3)){
clicon_err(OE_PLUGIN, EINVAL, "requires arguments: <db> <apipathfmt> [<mountpt>]"); clicon_err(OE_PLUGIN, EINVAL, "requires arguments: <db> <apipathfmt> [<mountpt>]");
goto done; goto done;
@ -253,23 +254,18 @@ expand_dbvar(void *h,
} }
if (autocli_grouping_treeref(h, &grouping_treeref) < 0) if (autocli_grouping_treeref(h, &grouping_treeref) < 0)
goto done; goto done;
if (grouping_treeref && if ((api_path_fmt_cb = cbuf_new()) == NULL){
(cbprepend = cligen_expand_prepend_get(cli_cligen(h))) != NULL){ clicon_err(OE_PLUGIN, errno, "cbuf_new");
cbuf *cb;
if ((cb = cbuf_new()) == NULL){
clicon_err(OE_UNIX, errno, "cbuf_new");
goto done;
}
cprintf(cb, "%s%s", cbuf_get(cbprepend), cv_string_get(cv));
if ((api_path_fmt = strdup(cbuf_get(cb))) == NULL){
clicon_err(OE_UNIX, errno, "strdup");
goto done;
}
}
else if ((api_path_fmt = strdup(cv_string_get(cv))) == NULL){
clicon_err(OE_UNIX, errno, "strdup");
goto done; goto done;
} }
if (grouping_treeref &&
(callback_cvv = cligen_callback_arguments_get(cli_cligen(h))) != NULL){
/* Concatenate callback arguments to a singel prepend string */
if (cvec_concat_cb(callback_cvv, api_path_fmt_cb) < 0)
goto done;
}
cprintf(api_path_fmt_cb, "%s", cv_string_get(cv));
api_path_fmt = cbuf_get(api_path_fmt_cb);
if (cvec_len(argv) > 2){ if (cvec_len(argv) > 2){
cv = cvec_i(argv, 2); cv = cvec_i(argv, 2);
str = cv_string_get(cv); str = cv_string_get(cv);
@ -414,8 +410,8 @@ expand_dbvar(void *h,
done: done:
if (nsc0) if (nsc0)
cvec_free(nsc0); cvec_free(nsc0);
if (api_path_fmt) if (api_path_fmt_cb)
free(api_path_fmt); cbuf_free(api_path_fmt_cb);
if (api_path_fmt01) if (api_path_fmt01)
free(api_path_fmt01); free(api_path_fmt01);
if (cbxpath) if (cbxpath)