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;

------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to