osaf/services/saf/amf/amfd/include/node.h |   3 +-
 osaf/services/saf/amf/amfd/nodegroup.cc   |  12 ++--------
 osaf/services/saf/amf/amfd/su.cc          |  32 ++++++++++++++----------------
 3 files changed, 20 insertions(+), 27 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
@@ -147,8 +147,9 @@ typedef struct avd_ng_tag {
 
        NCS_PATRICIA_NODE tree_node;    /* key will be AMF  node group name */
        SaNameT ng_name;
+        // TODO HANO number_nodes is redundant, use saAmfNGNodeList.size() 
instead
        uint32_t number_nodes;  /* number of element in saAmfNGNodeList */
-       SaNameT *saAmfNGNodeList;       /* array of node names in group */
+       std::vector<SaNameT> saAmfNGNodeList;   /* vector of node names in 
group */
 
        struct avd_ng_tag *cluster_list_ng_next;
        struct avd_cluster_tag *ng_on_cluster;
diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc 
b/osaf/services/saf/amf/amfd/nodegroup.cc
--- a/osaf/services/saf/amf/amfd/nodegroup.cc
+++ b/osaf/services/saf/amf/amfd/nodegroup.cc
@@ -146,7 +146,7 @@ static AVD_AMF_NG *ng_create(SaNameT *dn
                &values_number) == SA_AIS_OK) && (values_number > 0)) {
 
                ng->number_nodes = values_number;
-               ng->saAmfNGNodeList = 
static_cast<SaNameT*>(malloc(values_number * sizeof(SaNameT)));
+               ng->saAmfNGNodeList.resize(values_number);
                for (i = 0; i < values_number; i++) {
                        if ((node_name = immutil_getNameAttr(attributes, 
"saAmfNGNodeList", i)) != NULL)
                                ng->saAmfNGNodeList[i] = *node_name;
@@ -178,7 +178,7 @@ static void ng_delete(AVD_AMF_NG *ng)
        osafassert(rc == NCSCC_RC_SUCCESS);
 
        osafassert(ng);
-       free(ng->saAmfNGNodeList);
+
        delete ng;
 }
 
@@ -481,13 +481,7 @@ static void ng_ccb_apply_modify_hdlr(Ccb
        while ((mod = opdata->param.modify.attrMods[i++]) != NULL) {
                switch (mod->modType) {
                case SA_IMM_ATTR_VALUES_ADD: {
-                       ng->saAmfNGNodeList = 
static_cast<SaNameT*>(realloc(ng->saAmfNGNodeList,
-                                                                   
(ng->number_nodes + mod->modAttr.attrValuesNumber) * sizeof(SaNameT)));
-
-                       if (ng->saAmfNGNodeList == NULL) {
-                               LOG_EM("%s: realloc FAILED", __FUNCTION__);
-                               exit(1);
-                       }
+                       ng->saAmfNGNodeList.resize(ng->number_nodes + 
mod->modAttr.attrValuesNumber);
 
                        for (j = 0; j < mod->modAttr.attrValuesNumber; j++) {
                                ng->saAmfNGNodeList[ng->number_nodes + j] = 
*((SaNameT *)mod->modAttr.attrValues[j]);
diff --git a/osaf/services/saf/amf/amfd/su.cc b/osaf/services/saf/amf/amfd/su.cc
--- a/osaf/services/saf/amf/amfd/su.cc
+++ b/osaf/services/saf/amf/amfd/su.cc
@@ -31,6 +31,13 @@
 
 static NCS_PATRICIA_TREE su_db;
 
+// TODO HANO place this function in some other file
+bool operator== (SaNameT &lhs, SaNameT &rhs)
+{
+       osafassert((lhs.length <= SA_MAX_NAME_LENGTH) && (rhs.length <= 
SA_MAX_NAME_LENGTH));
+       return (!memcmp(&lhs.value, &rhs.value, lhs.length));
+}
+
 void avd_su_db_add(AVD_SU *su)
 {
        unsigned int rc;
@@ -371,9 +378,6 @@ static int is_config_valid(const SaNameT
        if ((strstr((char *)saAmfSUHostNodeOrNodeGroup.value, 
"safAmfNodeGroup=") != NULL) &&
            (strstr((char *)saAmfSGSuHostNodeGroup.value, "safAmfNodeGroup=") 
!= NULL)) {
                AVD_AMF_NG *ng_of_su, *ng_of_sg;
-               SaNameT *ng_node_list_su, *ng_node_list_sg;
-               unsigned int i;
-               unsigned int j;
                int found;
 
                ng_of_su = avd_ng_get(&saAmfSUHostNodeOrNodeGroup);
@@ -397,27 +401,21 @@ static int is_config_valid(const SaNameT
                        return 0;
                }
 
-               ng_node_list_su = ng_of_su->saAmfNGNodeList;
-
-               for (i = 0; i < ng_of_su->number_nodes; i++) {
-                       found = 0;
-                       ng_node_list_sg = ng_of_sg->saAmfNGNodeList;
-
-                       for (j = 0; j < ng_of_sg->number_nodes; j++) {
-                               if (!memcmp(ng_node_list_su, ng_node_list_sg, 
sizeof(SaNameT)))
-                                       found = 1;
-
-                               ng_node_list_sg++;
+               for (std::vector<SaNameT>::iterator su_iter = 
ng_of_su->saAmfNGNodeList.begin();
+                       su_iter != ng_of_su->saAmfNGNodeList.end(); ++su_iter) {
+                       found = false;
+               
+                       for (std::vector<SaNameT>::iterator sg_iter = 
ng_of_sg->saAmfNGNodeList.begin();
+                       sg_iter != ng_of_su->saAmfNGNodeList.end(); ++sg_iter) {
+                               if (*su_iter == *sg_iter)
+                                       found = true;
                        }
-
                        if (!found) {
                                report_ccb_validation_error(opdata, 
                                                "SU node group '%s' is not a 
subset of the SG node group '%s'",
                                                
saAmfSUHostNodeOrNodeGroup.value, saAmfSGSuHostNodeGroup.value);
                                return 0;
                        }
-
-                       ng_node_list_su++;
                }
        }
 

------------------------------------------------------------------------------
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