diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2018-08-29 14:03:05 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2018-12-13 15:02:55 +0100 |
commit | 68e218f9a0c61a41343eeae14eadd2e2f04fae91 (patch) | |
tree | 31549f90a6fc5377d775ee6438f10e341348b191 /ctl-lib/ctl-action.c | |
parent | a0f6ac410373843035cd54d648b28e9ea8f0cd1f (diff) |
Change loading configuration object behavior
This changes the default behavior when loading actions. Now, it appends
the new actions to the old ones instead of replacing them when called
several times.
If there were no actions previously loaded then it just loads normally
the actions.
Change-Id: Ica58a3edf4a9bf18ae31c6b6a5fa329e7ec5478b
Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'ctl-lib/ctl-action.c')
-rw-r--r-- | ctl-lib/ctl-action.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/ctl-lib/ctl-action.c b/ctl-lib/ctl-action.c index 8aa5dc7..a42e8b5 100644 --- a/ctl-lib/ctl-action.c +++ b/ctl-lib/ctl-action.c @@ -363,3 +363,47 @@ CtlActionT *ActionConfig(AFB_ApiT apiHandle, json_object *actionsJ, int exportAp return actions; } + +int AddActionsToSection(AFB_ApiT apiHandle, CtlSectionT *section, json_object *actionsJ, int exportApi) { + if (actionsJ || section) { + CtlActionT *actions = NULL; + if(section->actions) { + int actionsNb = 0, idx = 0, jdx = 0; + CtlActionT *savedActions = section->actions; + CtlActionT *newActions = ActionConfig(apiHandle, actionsJ, exportApi); + + while(savedActions[actionsNb].uid) + actionsNb++; + while(newActions[actionsNb].uid) + actionsNb++; + + actions = calloc(actionsNb + 1, sizeof(CtlActionT)); + + while(savedActions[idx].uid) { + actions[idx] = savedActions[idx]; + idx++; + } + while(newActions[jdx].uid && idx <= actionsNb) { + actions[idx] = newActions[jdx]; + idx++; + jdx++; + } + free(savedActions); + free(newActions); + } + else { + actions = ActionConfig(apiHandle, actionsJ, exportApi); + } + section->actions = actions; + } + else { + AFB_ApiError (apiHandle, "Missing actions to add or the section object"); + return 1; + } + + if (!section->actions) { + AFB_ApiError (apiHandle, "Adding '%s' fails to section %s", json_object_get_string(actionsJ), section->uid); + return 1; + } + return 0; +} |