osaf/services/saf/ntfsv/ntfimcnd/Makefile.am        |   2 +
 osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c      |  91 +++++++++++---------
 osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c |  54 ++++++------
 3 files changed, 78 insertions(+), 69 deletions(-)


diff --git a/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am 
b/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
--- a/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
+++ b/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
@@ -27,6 +27,7 @@ osaf_execbindir = $(pkglibdir)
 osaf_execbin_PROGRAMS = osafntfimcnd
 
 osafntfimcnd_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/ntfsv/include \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
@@ -39,6 +40,7 @@ osafntfimcnd_SOURCES = \
 osafntfimcnd_LDADD = \
        $(top_builddir)/osaf/tools/safimm/src/libimmutil.la \
        $(top_builddir)/osaf/libs/core/libopensaf_core.la \
+       $(top_builddir)/osaf/libs/common/ntfsv/libntfsv_common.la \
        $(top_builddir)/osaf/libs/saf/libSaAmf/libSaAmf.la \
        $(top_builddir)/osaf/libs/saf/libSaImm/libSaImmOi.la \
        $(top_builddir)/osaf/libs/saf/libSaImm/libSaImmOm.la \
diff --git a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c 
b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
--- a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
+++ b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
@@ -25,11 +25,13 @@
 #include <unistd.h>
 #include <errno.h>
 
+#include "saAis.h"
 #include "saNtf.h"
 #include "saAmf.h"
 #include "logtrace.h"
 #include "saf_error.h"
 #include "ncsgl_defs.h"
+#include "osaf_extended_name.h"
 
 #include "saImmOm.h"
 #include "saImmOi.h"
@@ -54,9 +56,9 @@ static const SaImmOiImplementerNameT app
 
 /* Used with function get_rdn_attr_name() */
 struct {
-       char attrName[SA_MAX_NAME_LENGTH];
-       char saved_className[SA_MAX_NAME_LENGTH];
-} s_get_rdn_attr_name = {{0},{0}};
+       char* attrName;
+       char* saved_className;
+} s_get_rdn_attr_name = {NULL, NULL};;
 
 /* Used with function get_created_dn() */
 struct s_get_created_dn {
@@ -103,10 +105,17 @@ static char *get_rdn_attr_name(const SaI
        TRACE_ENTER();
 
        /* Just return the name if already looked up */
-       if (strcmp(className, s_get_rdn_attr_name.saved_className) == 0) {
+       if (s_get_rdn_attr_name.saved_className != NULL &&
+               strcmp(className, s_get_rdn_attr_name.saved_className) == 0) {
                goto done;
        }
-       strncpy(s_get_rdn_attr_name.saved_className, className, 
SA_MAX_NAME_LENGTH-1);
+       s_get_rdn_attr_name.saved_className =
+               realloc(s_get_rdn_attr_name.saved_className, strlen(className) 
+ 1);
+       if (s_get_rdn_attr_name.saved_className == NULL) {
+               LOG_ER("Failed to realloc memory");
+               goto error;
+       }
+       memcpy(s_get_rdn_attr_name.saved_className, className, 
strlen(className) + 1);
 
        /* Get class description */
        msecs_waited = 0;
@@ -128,11 +137,17 @@ static char *get_rdn_attr_name(const SaI
        }
 
        /* Find the name of the attribute with the RDN flag set */
-       s_get_rdn_attr_name.attrName[0] = '\0';
        for (i=0; attrDescr[i] != NULL; i++) {
                if (attrDescr[i]->attrFlags & SA_IMM_ATTR_RDN) {
-                       
strncpy(s_get_rdn_attr_name.attrName,attrDescr[i]->attrName,SA_MAX_NAME_LENGTH);
-                       s_get_rdn_attr_name.attrName[SA_MAX_NAME_LENGTH-1] = 
'\0';
+                       s_get_rdn_attr_name.attrName =
+                               realloc(s_get_rdn_attr_name.attrName,
+                                               strlen(attrDescr[i]->attrName) 
+ 1);
+                       if (s_get_rdn_attr_name.attrName == NULL) {
+                               LOG_ER("Failed to realloc memory");
+                               goto error;
+                       }
+                       memcpy(s_get_rdn_attr_name.attrName, 
attrDescr[i]->attrName
+                                                       , 
strlen(attrDescr[i]->attrName) + 1);
                        break;
                }
        }
@@ -178,7 +193,7 @@ static SaNameT *get_created_dn(const SaI
 {
        int i = 0;
 
-       SaNameT object_rdn;
+       const char* object_rdn = "";
        char *attrName;
 
        TRACE_ENTER();
@@ -190,27 +205,30 @@ static SaNameT *get_created_dn(const SaI
        for (i=0; attr[i] != NULL; i++) {
                if( strcmp(attr[i]->attrName, attrName) == 0) {
                        if (attr[i]->attrValueType == SA_IMM_ATTR_SASTRINGT) {
-                               strncpy((char*)object_rdn.value, 
*((char**)attr[i]->attrValues[0]),
-                                               SA_MAX_NAME_LENGTH);
-                               object_rdn.value[SA_MAX_NAME_LENGTH-1] = '\0';
-                               object_rdn.length = 
strlen((char*)object_rdn.value);
+                               object_rdn = *((char**) attr[i]->attrValues[0]);
                        } else if (attr[i]->attrValueType == 
SA_IMM_ATTR_SANAMET) {
-                               memcpy(&object_rdn, attr[i]->attrValues[0], 
sizeof(SaNameT));
+                               object_rdn = osaf_extended_name_borrow(
+                                                                       
(SaNameT*)(attr[i]->attrValues[0]));
                        }
                        break;
                }
        }
 
        /* Create the DN */
-       s_get_created_dn.objectName.value[0] = 0;
-       if (parentName->length > 0) {
-               
snprintf((char*)s_get_created_dn.objectName.value,SA_MAX_NAME_LENGTH,"%s,%s",
-                               (char*)object_rdn.value, 
(char*)parentName->value);
+       osaf_extended_name_free(&s_get_created_dn.objectName);
+       char* objectName;
+       if (!osaf_is_extended_name_empty(parentName)) {
+               size_t rdn_len = strlen(object_rdn);
+               size_t parent_len = osaf_extended_name_length(parentName);
+               objectName = malloc(rdn_len + parent_len + 2);
+               memcpy(objectName, object_rdn, rdn_len);
+               objectName[rdn_len] = ',';
+               memcpy(objectName + rdn_len + 1, 
osaf_extended_name_borrow(parentName)
+                                                                               
, parent_len + 1);
        } else {
-               
snprintf((char*)s_get_created_dn.objectName.value,SA_MAX_NAME_LENGTH,"%s",
-                               (char*)object_rdn.value);
+               objectName = strdup(object_rdn);
        }
-       s_get_created_dn.objectName.length = 
strlen((char*)s_get_created_dn.objectName.value);
+       osaf_extended_name_steal(objectName, &s_get_created_dn.objectName);
 
        TRACE_LEAVE();
        return &s_get_created_dn.objectName;
@@ -247,15 +265,12 @@ static SaNameT *get_operation_invoke_nam
        }
        
        /* Get the value from Admin owner name or Implementer name */
-       s_get_operation_invoke_name_create.iname.length = 0;
-       s_get_operation_invoke_name_create.iname.value[0] = 0;
+       osaf_extended_name_free(&s_get_operation_invoke_name_create.iname);
+       osaf_extended_name_clear(&s_get_operation_invoke_name_create.iname);
        for (i=0; attr[i] != NULL; i++) {
                if( strcmp(attr[i]->attrName, attrName) == 0) {
-                       
strncpy((char*)s_get_operation_invoke_name_create.iname.value,
-                                       *((char**)attr[i]->attrValues[0]), 
SA_MAX_NAME_LENGTH);
-                       
s_get_operation_invoke_name_create.iname.value[SA_MAX_NAME_LENGTH-1] = '\0';
-                       s_get_operation_invoke_name_create.iname.length =
-                                       
strlen((char*)s_get_operation_invoke_name_create.iname.value);
+                       osaf_extended_name_alloc(*((char**) 
attr[i]->attrValues[0]),
+                               &s_get_operation_invoke_name_create.iname);
                        goto done;
                }
        }
@@ -299,16 +314,12 @@ static SaNameT *get_operation_invoke_nam
        }
 
        /* Get the value from Admin owner name or Implementer name */
-       s_get_operation_invoke_name_modify.iname.length = 0;
-       s_get_operation_invoke_name_modify.iname.value[0] = 0;
+       osaf_extended_name_free(&s_get_operation_invoke_name_modify.iname);
+       osaf_extended_name_clear(&s_get_operation_invoke_name_modify.iname);
        for (i=0; attrMods[i] != NULL; i++) {
                if( strcmp(attrMods[i]->modAttr.attrName, attrName) == 0) {
-                       
strncpy((char*)s_get_operation_invoke_name_modify.iname.value,
-                                       
*((char**)attrMods[i]->modAttr.attrValues[0]),
-                                       SA_MAX_NAME_LENGTH);
-                       
s_get_operation_invoke_name_modify.iname.value[SA_MAX_NAME_LENGTH-1] = '\0';
-                       s_get_operation_invoke_name_modify.iname.length =
-                                       
strlen((char*)s_get_operation_invoke_name_modify.iname.value);
+                       osaf_extended_name_alloc(*((char**) 
attrMods[i]->modAttr.attrValues[0]),
+                               &s_get_operation_invoke_name_modify.iname);
                        goto done;
                }
        }
@@ -335,10 +346,8 @@ static SaAisErrorT saImmOiCcbObjectDelet
        SaAisErrorT rc = SA_AIS_OK;
        struct CcbUtilCcbData *ccbUtilCcbData;
        struct CcbUtilOperationData *ccbUtilOperationData;
-       const SaNameT invoke_name = {
-               .length = 0,
-               .value[0]='\0'
-       };
+       SaNameT invoke_name;
+       osaf_extended_name_clear(&invoke_name);
        int internal_rc = 0;
 
        TRACE_ENTER();
@@ -815,4 +824,4 @@ void ntfimcn_special_applier_clear(void)
                        TRACE("%s saImmOiImplementerClear failed 
%s",__FUNCTION__,saf_error(rc));
                }
        }
-}
\ No newline at end of file
+}
diff --git a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c 
b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
--- a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
+++ b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
@@ -27,11 +27,14 @@
 #include <stdbool.h>
 
 #include "ncsgl_defs.h"
+#include "saAis.h"
 #include "saNtf.h"
 #include "saAmf.h"
 #include "saImm.h"
 #include "logtrace.h"
 #include "saf_error.h"
+#include "ntfsv_mem.h"
+#include "osaf_extended_name.h"
 
 #include "ntfimcn_main.h"
 
@@ -163,13 +166,12 @@ done:
        TRACE_ENTER();
 
        /* Allocate string for attribute name */
-       name_len = strlen(info_value) + 1;
-       if (name_len > SA_MAX_NAME_LENGTH) {
-               name_len = SA_MAX_NAME_LENGTH;
-       }
+       name_len = strlen(info_value);
+       if (name_len > kMaxDnLength)
+               name_len = kMaxDnLength;
        rc = saNtfPtrValAllocate(
                        notificationHandle,
-                       name_len,
+                       name_len + 1,
                        (void **)&name_ptr,
                        &additionalInfo[add_index].infoValue);
        if (rc != SA_AIS_OK) {
@@ -182,10 +184,8 @@ done:
        /* Fill in additional info of Index */
        additionalInfo[add_index].infoId = add_index;
        additionalInfo[add_index].infoType = SA_NTF_VALUE_STRING;
-       strncpy((char *)name_ptr, info_value, name_len);
-       if (name_len == SA_MAX_NAME_LENGTH) {
-               name_ptr[SA_MAX_NAME_LENGTH] = '\0';
-       }
+       memcpy(name_ptr, info_value, name_len);
+       name_ptr[name_len] = '\0';
 
 done:
        TRACE_LEAVE();
@@ -317,8 +317,8 @@ static int fill_attribute_value(
        case SA_IMM_ATTR_SANAMET:       /* SaNameT */
                name_value = *(SaNameT *)attrValues_in[attrValues_index_in];
                internal_rc = fill_value_array(notificationHandle,
-                               name_value.value,
-                               name_value.length,
+                               
(SaUint8T*)osaf_extended_name_borrow(&name_value),
+                               strlen(osaf_extended_name_borrow(&name_value)),
                                value_out);
                if (internal_rc != 0) {
                        LOG_ER("%s: fill_value_array failed",__FUNCTION__);
@@ -394,14 +394,13 @@ static void fill_notification_header_com
 
        /* Notification Object. DN of handled object */
        sa_name_ptr = notificationHeader->notificationObject;
-       strncpy((char*)sa_name_ptr->value, (char *)dist_name->value,    
SA_MAX_NAME_LENGTH);
-       sa_name_ptr->value[SA_MAX_NAME_LENGTH-1] = 0;
-       sa_name_ptr->length = strlen((char *)sa_name_ptr->value) + 1;
-
+       ntfs_sanamet_alloc(osaf_extended_name_borrow(dist_name)
+                                               , 
osaf_extended_name_length(dist_name) + 1
+                                               , sa_name_ptr);
        /* Notifying Object. A constant string */
        sa_name_ptr = notificationHeader->notifyingObject;
-       strncpy((char 
*)sa_name_ptr->value,NTFIMCN_NOTIFYING_OBJECT,SA_MAX_NAME_LENGTH);
-       sa_name_ptr->length = sizeof(NTFIMCN_NOTIFYING_OBJECT);
+       ntfs_sanamet_alloc(NTFIMCN_NOTIFYING_OBJECT, 
sizeof(NTFIMCN_NOTIFYING_OBJECT)
+                                               , sa_name_ptr);
 
        /* Notification Class Identifier. Constant identifier
         * except for minor Id that's dependent on event type
@@ -711,7 +710,7 @@ done:
  */
 static int fill_attribute_info_modify(
                        SaImmOiCcbIdT CcbId,
-                       SaStringT invoke_name,
+                       SaConstStringT invoke_name,
                        const SaImmAttrModificationT_2 **imm_attr_mods_in,
                        SaNtfAttributeChangeNotificationT 
*SaNtfAttributeChangeNotification,
                        SaBoolT ccbLast)
@@ -724,7 +723,7 @@ static int fill_attribute_info_modify(
        SaImmAttrModificationT_2 my_imm_attr_mod;
        SaNtfAttributeChangeT *changedAttributes=NULL;
        SaImmAttrValueT SaImmAttrValue=NULL;
-       char *string_v[1];
+       SaConstStringT string_v[1];
 
        TRACE_ENTER();
 
@@ -951,7 +950,7 @@ done:
  * @return (-1) on error
  */
 static int fill_attribute_info_delete(SaImmOiCcbIdT CcbId,
-                       SaStringT invoke_name,
+                       SaConstStringT invoke_name,
                        SaNtfObjectCreateDeleteNotificationT 
*SaNtfObjectNotification,
                        SaBoolT ccbLast)
 {
@@ -960,7 +959,7 @@ static int fill_attribute_info_delete(Sa
        SaNtfAttributeT *ntf_attributes;
        /*SaImmAttrValueT my_imm_attr_value;*/
        SaImmAttrValueT my_imm_attr_value[1]; /* COV fix */
-       char *string_v[1];
+       SaConstStringT string_v[1];
 
        TRACE_ENTER();
 
@@ -1261,7 +1260,7 @@ int ntfimcn_send_object_modify_notificat
        SaAisErrorT rc = SA_AIS_OK;
        int internal_rc = 0;
        SaImmOiCcbIdT CcbId;
-       char invoke_name_str[SA_MAX_NAME_LENGTH+1];
+       SaConstStringT invoke_name_str;
 
        SaNtfAttributeChangeNotificationT SaNtfAttributeChangeNotification;
        SaUint64T num_attributes = 4;
@@ -1295,7 +1294,7 @@ int ntfimcn_send_object_modify_notificat
         * pointer to a SaNameT. This should be changed to a SaStringT.
         * Until then a conversion is needed.
         */
-       
snprintf(invoke_name_str,(invoke_name->length+1),"%s",invoke_name->value);
+       invoke_name_str = osaf_extended_name_borrow(invoke_name);
 #endif
 
        /* Find out how many attributes we have to handle */
@@ -1416,7 +1415,7 @@ int ntfimcn_send_object_delete_notificat
 
        SaNtfObjectCreateDeleteNotificationT SaNtfObjectDeleteNotification;
        SaUint64T num_attributes = 3;
-       char invoke_name_str[SA_MAX_NAME_LENGTH+1];
+       SaConstStringT invoke_name_str;
 
        TRACE_ENTER();
        CcbId = CcbUtilOperationData->ccbId;
@@ -1458,9 +1457,7 @@ int ntfimcn_send_object_delete_notificat
        /* Fill in Additional info and corresponding Attribute list
         */
        if (num_attributes > 0) {
-               memcpy(invoke_name_str,invoke_name->value,
-                               invoke_name->length);
-               invoke_name_str[invoke_name->length] = '\0';
+               invoke_name_str = osaf_extended_name_borrow(invoke_name);
                internal_rc = fill_attribute_info_delete(CcbId,
                                invoke_name_str,
                                &SaNtfObjectDeleteNotification,
@@ -1519,7 +1516,8 @@ int ntfimcn_send_lost_cm_notification(vo
 {
        SaAisErrorT rc = SA_AIS_OK;
        int internal_rc = 0;
-       SaNameT object_name = {12,"osafntfimcnd"};
+       SaNameT object_name;
+       osaf_extended_name_lend("osafntfimcnd", &object_name);
 
        SaNtfStateChangeNotificationT SaNtfStateChangeNotification;
        const SaUint64T num_statechanges=0;

------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to