osaf/services/saf/amf/amfnd/clc.cc |  19 ++++++++-----------
 1 files changed, 8 insertions(+), 11 deletions(-)


diff --git a/osaf/services/saf/amf/amfnd/clc.cc 
b/osaf/services/saf/amf/amfnd/clc.cc
--- a/osaf/services/saf/amf/amfnd/clc.cc
+++ b/osaf/services/saf/amf/amfnd/clc.cc
@@ -33,6 +33,7 @@
 ******************************************************************************
 */
 
+#include <vector>
 #include <string.h>
 
 #include <logtrace.h>
@@ -2458,7 +2459,7 @@ uint32_t avnd_comp_clc_orph_restart_hdle
  * 
  * @return bool
  */
-static bool var_in_envset(const char *name, const NCS_OS_ENVIRON_SET_NODE 
*env_set, unsigned int env_counter)
+static bool var_in_envset(const char *name, const 
std::vector<NCS_OS_ENVIRON_SET_NODE>& env_set, unsigned int env_counter)
 {
        unsigned int i;
        const char *var;
@@ -2490,7 +2491,7 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_
 {
        NCS_OS_PROC_EXECUTE_TIMED_INFO cmd_info;
        NCS_OS_ENVIRON_ARGS arg;
-       NCS_OS_ENVIRON_SET_NODE *env_set;
+       std::vector<NCS_OS_ENVIRON_SET_NODE> env_set;
        char env_val_nodeid[11];
        char env_val_comp_err[11];      /*we req only 10 */
        char env_var_name[] = "SA_AMF_COMPONENT_NAME";
@@ -2548,7 +2549,7 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_
 
        /* Allocate environment variable set */
        env_set_nmemb = comp->numOfCompCmdEnv + 3;
-       env_set = static_cast<NCS_OS_ENVIRON_SET_NODE*>(calloc(env_set_nmemb, 
sizeof(NCS_OS_ENVIRON_SET_NODE)));
+       env_set.resize(env_set_nmemb);
        memset(&cmd_info, 0, sizeof(NCS_OS_PROC_EXECUTE_TIMED_INFO));
        memset(&arg, 0, sizeof(NCS_OS_ENVIRON_ARGS));
 
@@ -2621,12 +2622,8 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_
                        osafassert(csi);
 
                        /* allocate additional env_set memory for the CSI 
attributes */
-                       env_set = 
static_cast<NCS_OS_ENVIRON_SET_NODE*>(realloc(env_set, 
sizeof(NCS_OS_ENVIRON_SET_NODE) * (env_set_nmemb + 
-                                               csi->attrs.number)));
-                       osafassert(env_set);
-
-                       /* initialize newly allocated memory */
-                       memset(&env_set[env_set_nmemb], 0, 
sizeof(NCS_OS_ENVIRON_SET_NODE) * csi->attrs.number);
+                       NCS_OS_ENVIRON_SET_NODE empty_env_set = {0};
+                       env_set.resize(env_set_nmemb + csi->attrs.number, 
empty_env_set);
 
                        for (i = 0, csiattr = csi->attrs.list; i < 
csi->attrs.number; i++, csiattr++) {
                                if (var_in_envset((char*)csiattr->name.value, 
env_set, env_counter)) {
@@ -2652,7 +2649,8 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_
                } /* if (comp->csi_list.n_nodes == 1) */
        }
 
-       arg.env_arg = env_set;
+       // this construct should be safe C++ according to std (contiguos memory)
+       arg.env_arg = &env_set[0];
 
        /* tokenize the cmd */
        m_AVND_COMP_CLC_STR_PARSE(clc_info->cmds[cmd_type - 1].cmd, scr, argc, 
argv, tmp_argv);
@@ -2684,7 +2682,6 @@ uint32_t avnd_comp_clc_cmd_execute(AVND_
                free(env_set[i].name);
                free(env_set[i].value);
        }
-       free(env_set);
 
        if (NCSCC_RC_SUCCESS != rc) {
                TRACE_2("The CLC CLI command execution failed");

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to