osaf/services/saf/amf/amfd/include/node.h | 1 +
osaf/services/saf/amf/amfnd/clc.cc | 19 ++++++++-----------
2 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/include/node.h
b/osaf/services/saf/amf/amfd/include/node.h
--- a/osaf/services/saf/amf/amfd/include/node.h
+++ b/osaf/services/saf/amf/amfd/include/node.h
@@ -34,6 +34,7 @@
#ifndef AVD_AVND_H
#define AVD_AVND_H
+#include <vector>
#include <saAmf.h>
#include <saImm.h>
#include <ncspatricia.h>
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