Hi Lennart, Thanks for your comments. Please see my responses inline [Vu].
Regards, Vu > -----Original Message----- > From: Lennart Lund [mailto:lennart.l...@ericsson.com] > Sent: Wednesday, August 3, 2016 8:57 PM > To: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au>; > mahesh.va...@oracle.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: RE: [PATCH 3 of 4] log: update logsv to support long DN [#1315] > > Hi Vu > > Ack with comments and after static checks done > > See comments inline [Lennart] > > Also if not done already, run the static checks (cppcheck and cpplint) and fix > found problems for at least the new code. [Vu] Done. Most are "Lines should be <= 80 characters long". Also fixing all "Redundant blank line ...". > > Thanks > Lennart > > > -----Original Message----- > > From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] > > Sent: den 1 juli 2016 12:42 > > To: mahesh.va...@oracle.com; Lennart Lund <lennart.l...@ericsson.com> > > Cc: opensaf-devel@lists.sourceforge.net > > Subject: [PATCH 3 of 4] log: update logsv to support long DN [#1315] > > > > osaf/services/saf/logsv/lgs/Makefile.am | 1 + > > osaf/services/saf/logsv/lgs/lgs.h | 4 +- > > osaf/services/saf/logsv/lgs/lgs_amf.cc | 14 +- > > osaf/services/saf/logsv/lgs/lgs_config.cc | 30 +- > > osaf/services/saf/logsv/lgs/lgs_evt.cc | 77 ++++-- > > osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 12 +- > > osaf/services/saf/logsv/lgs/lgs_fmt.cc | 41 ++- > > osaf/services/saf/logsv/lgs/lgs_imm.cc | 256 ++++++++++----------- > > osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc | 12 +- > > osaf/services/saf/logsv/lgs/lgs_main.cc | 7 +- > > osaf/services/saf/logsv/lgs/lgs_mbcsv.cc | 74 +++-- > > osaf/services/saf/logsv/lgs/lgs_mds.cc | 296 ++++++++++++++++------- > -- > > osaf/services/saf/logsv/lgs/lgs_recov.cc | 44 +-- > > osaf/services/saf/logsv/lgs/lgs_recov.h | 8 +- > > osaf/services/saf/logsv/lgs/lgs_stream.cc | 322 +++++++++---------------- > -- > > osaf/services/saf/logsv/lgs/lgs_stream.h | 18 +- > > osaf/services/saf/logsv/lgs/lgs_util.cc | 25 ++- > > osaf/services/saf/logsv/lgs/lgs_util.h | 2 + > > 18 files changed, 630 insertions(+), 613 deletions(-) > > > > > > Major change overview: > > 1) Replace all internal SaNameT with C/C++ strings > > 2) Remove NCS_PATRICIA_TREE used to hold stream DNs, > > Using the existing database `stream_array` instead. > > 3) Change a bit in `checkFieldSize()/lgs_fmt`, > > check `numOfDigits` agains number of digits of the constant > > SA_LOG_MAX_RECORD_SIZE > > > > diff --git a/osaf/services/saf/logsv/lgs/Makefile.am > > b/osaf/services/saf/logsv/lgs/Makefile.am > > --- a/osaf/services/saf/logsv/lgs/Makefile.am > > +++ b/osaf/services/saf/logsv/lgs/Makefile.am > > @@ -45,6 +45,7 @@ osaf_execbin_PROGRAMS = osaflogd > > osaflogd_CXXFLAGS = $(AM_CXXFLAGS) > > > > osaflogd_CPPFLAGS = \ > > + -DSA_EXTENDED_NAME_SOURCE \ > > $(AM_CPPFLAGS) \ > > -I$(top_srcdir)/osaf/libs/common/logsv/include \ > > -I$(top_srcdir)/osaf/libs/common/immsv/include > > diff --git a/osaf/services/saf/logsv/lgs/lgs.h > > b/osaf/services/saf/logsv/lgs/lgs.h > > --- a/osaf/services/saf/logsv/lgs/lgs.h > > +++ b/osaf/services/saf/logsv/lgs/lgs.h > > @@ -123,11 +123,11 @@ extern SaAisErrorT lgs_imm_init_configS > > > > // Functions for recovery handling > > void lgs_cleanup_abandoned_streams(); > > -void lgs_delete_one_stream_object(char *name_str); > > +void lgs_delete_one_stream_object(const std::string &name_str); > > void lgs_search_stream_objects(); > > SaUint32T *lgs_get_scAbsenceAllowed_attr(SaUint32T *attr_val); > > int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out, > > - char *object_name, > > + const std::string &object_name, > > SaImmHandleT *immOmHandle); > > int lgs_free_streamobj_attr(SaImmHandleT immHandle); > > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_amf.cc > > b/osaf/services/saf/logsv/lgs/lgs_amf.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_amf.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_amf.cc > > @@ -27,13 +27,13 @@ > > static void close_all_files() > > { > > log_stream_t *stream; > > - > > - stream = log_stream_getnext_by_name(NULL); > > + int num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > if (log_stream_file_close(stream) != 0) > > - LOG_WA("Could not close file for stream %s", > > stream->name); > > + LOG_WA("Could not close file for stream %s", > > stream->name.c_str()); > > > > - stream = log_stream_getnext_by_name(stream->name); > > + stream = log_stream_get_by_id(--num); > > } > > } > > > > @@ -54,6 +54,7 @@ static SaAisErrorT amf_active_state_hand > > { > > log_stream_t *stream; > > SaAisErrorT error = SA_AIS_OK; > > + int num; > > > > TRACE_ENTER2("HA ACTIVE request"); > > > > @@ -67,12 +68,13 @@ static SaAisErrorT amf_active_state_hand > > lgs_start_gcfg_applier(); > > > > /* check existing streams */ > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > if (!stream) > > LOG_ER("No streams exist!"); > > while (stream != NULL) { > > *stream->p_fd = -1; /* First Initialize fd */ > > - stream = log_stream_getnext_by_name(stream->name); > > + stream = log_stream_get_by_id(--num); > > } > > > > done: > > diff --git a/osaf/services/saf/logsv/lgs/lgs_config.cc > > b/osaf/services/saf/logsv/lgs/lgs_config.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_config.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_config.cc > > @@ -464,6 +464,7 @@ int lgs_cfg_verify_root_dir(const std::s > > int rc = 0; > > log_stream_t *stream = NULL; > > size_t n = root_str_in.size(); > > + int num; > > > > if (n > PATH_MAX) { > > LOG_NO("verify_root_dir Fail. Path > PATH_MAX"); > > @@ -475,7 +476,8 @@ int lgs_cfg_verify_root_dir(const std::s > > * Make sure that the path /rootPath/streamPath/<fileName><tail> > > * must not be larger than PATH_MAX. > > */ > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > if (lgs_is_valid_pathlength(stream->pathName, stream- > > >fileName, > > > > root_str_in) == false) { > > @@ -483,7 +485,8 @@ int lgs_cfg_verify_root_dir(const std::s > > rc = -1; > > goto done; > > } > > - stream = log_stream_getnext_by_name(stream->name); > > + > > + stream = log_stream_get_by_id(--num); > > } > > > > if (lgs_path_is_writeable_dir_h(root_str_in) == false) { > > @@ -785,7 +788,6 @@ static int verify_all_init() > > */ > > static void read_logsv_config_obj_2() { > > SaImmHandleT omHandle; > > - SaNameT objectName; > > SaImmAccessorHandleT accessorHandle; > > SaImmAttrValuesT_2 *attribute; > > SaImmAttrValuesT_2 **attributes; > > @@ -808,18 +810,15 @@ static void read_logsv_config_obj_2() { > > osaf_abort(0); > > } > > > > - n = snprintf((char *) objectName.value, SA_MAX_NAME_LENGTH, > > "%s", > > - LGS_IMM_LOG_CONFIGURATION); > > - if (n >= SA_MAX_NAME_LENGTH) { > > - LOG_ER("%s: Fail Object name > SA_MAX_NAME_LENGTH", > > __FUNCTION__); > > - osaf_abort(0); /* Should never happen */ > > - } > > - objectName.length = strlen((char *) objectName.value); > > + SaConstStringT objectName = LGS_IMM_LOG_CONFIGURATION; > > + > > + SaNameT tmpObjName; > > + osaf_extended_name_lend(objectName, &tmpObjName); > > > > /* Get all attributes of the object */ > > if ((om_rc = immutil_saImmOmAccessorGet_2( > > accessorHandle, > > - &objectName, > > + &tmpObjName, > > NULL, > > &attributes)) != SA_AIS_OK) { > > LOG_NO("%s immutil_saImmOmAccessorGet_2 Fail: %s", > > @@ -1396,15 +1395,14 @@ void conf_runtime_obj_create(SaImmOiHand > > NULL > > }; > > > > - SaNameT parent_name, *parent_name_p; > > - strcpy((char *) parent_name.value, "safApp=safLogService"); > > - parent_name.length = strlen((char *) parent_name.value); > > - parent_name_p = &parent_name; > > + SaNameT parent_name_p; > > + SaConstStringT parent_name = "safApp=safLogService"; > > + osaf_extended_name_lend(parent_name, &parent_name_p); > > > > rc = immutil_saImmOiRtObjectCreate_2( > > immOiHandle, > > > > const_cast<SaImmClassNameT>("OpenSafLogCurrentConfig"), > > - parent_name_p, > > + &parent_name_p, > > attrValues); > > > > if (rc == SA_AIS_ERR_EXIST) { > > diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.cc > > b/osaf/services/saf/logsv/lgs/lgs_evt.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_evt.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_evt.cc > > @@ -23,6 +23,7 @@ > > #include "lgs_mbcsv_v2.h" > > #include "lgs_recov.h" > > #include "lgs_imm_gcfg.h" > > +#include "osaf_extended_name.h" > > > > /* Macro to validate the version */ > > #define m_LOG_VER_IS_VALID(ver) \ > > @@ -542,12 +543,13 @@ static uint32_t proc_rda_cb_msg(lgsv_lgs > > lgs_process_lga_down_list(); > > > > /* Check existing streams */ > > - stream = log_stream_getnext_by_name(NULL); > > + int num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > if (!stream) > > LOG_ER("No streams exist!"); > > while (stream != NULL) { > > - *stream->p_fd = -1; /* Initialize fd */ > > - stream = log_stream_getnext_by_name(stream- > > >name); > > + *stream->p_fd = -1; /* Initialize fd */ > > + stream = log_stream_get_by_id(--num); > > } > > } > > > > @@ -764,7 +766,7 @@ static uint32_t lgs_ckpt_stream_open(lgs > > ckpt_rec_open_ptr->logPath = const_cast<char > > *>(logStream->pathName.c_str()); > > ckpt_rec_open_ptr->logFileCurrent = const_cast<char > > *>(logStream->logFileCurrent.c_str()); > > ckpt_rec_open_ptr->fileFmt = logStream->logFileFormat; > > - ckpt_rec_open_ptr->logStreamName = logStream->name; > > + ckpt_rec_open_ptr->logStreamName = const_cast<char > > *>(logStream->name.c_str()); > > > > ckpt_rec_open_ptr->maxFileSize = logStream- > > >maxLogFileSize; > > ckpt_rec_open_ptr->maxLogRecordSize = logStream- > > >fixedLogRecordSize; > > @@ -803,11 +805,13 @@ SaAisErrorT create_new_app_stream( > [Lennart] This function has an unused in parameter "creationFlag". Remove if > no longer needed. > The original usage of this flag was when creation of a stream it could be > selected whether also new files for the stream should be created or not. > The flag was introduced so that a stream could be created during recovery in > such a way that already exiting files could be reused [Vu] Done. I removed it. > > > log_stream_t *stream; > > SaBoolT twelveHourModeFlag; > > SaUint32T logMaxLogrecsize_conf = 0; > > + SaConstStringT str_name; > > + int num, err = 0; > > > > TRACE_ENTER(); > > > > - if (open_sync_param->lstr_name.length > > > SA_MAX_NAME_LENGTH) { > > - TRACE("Name too long"); > > + if (lgs_is_extended_name_valid(&open_sync_param->lstr_name) > > == false) { > > + TRACE("SaNameT is invalid"); > > rc = SA_AIS_ERR_INVALID_PARAM; > > goto done; > > } > > @@ -863,7 +867,8 @@ SaAisErrorT create_new_app_stream( > > } > > > > /* Verify that path and file are unique */ > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > if ((stream->fileName == open_sync_param->logFileName) > > && > > (stream->pathName == open_sync_param- > > >logFilePathName)) { > > @@ -871,12 +876,13 @@ SaAisErrorT create_new_app_stream( > > rc = SA_AIS_ERR_INVALID_PARAM; > > goto done; > > } > > - stream = log_stream_getnext_by_name(stream->name); > > + stream = log_stream_get_by_id(--num); > > } > > > > /* Verify that the name seems to be a DN */ > > - if (strncmp("safLgStr=", (char *)open_sync_param- > > >lstr_name.value, sizeof("safLgStr=") != 0)) { > > - TRACE("'%s' is not a valid stream name => invalid param", > > open_sync_param->lstr_name.value); > > + str_name = osaf_extended_name_borrow(&open_sync_param- > > >lstr_name); > > + if (strncmp("safLgStr=", str_name, sizeof("safLgStr=") != 0)) { > > + TRACE("'%s' is not a valid stream name => invalid param", > > str_name); > > rc = SA_AIS_ERR_INVALID_PARAM; > > goto done; > > } > > @@ -891,25 +897,34 @@ SaAisErrorT create_new_app_stream( > > goto done; > > } > > > > - stream = log_stream_new_1(&open_sync_param->lstr_name, > > - open_sync_param->logFileName, > > - open_sync_param->logFilePathName, > > - open_sync_param->maxLogFileSize, > > - open_sync_param->maxLogRecordSize, > > - open_sync_param->logFileFullAction, > > - open_sync_param->maxFilesRotated, > > - open_sync_param->logFileFmt, > > - STREAM_TYPE_APPLICATION, > > - STREAM_NEW, > > - twelveHourModeFlag, > > - 0, > > - creationFlag); > > + *o_stream = log_stream_new(str_name, STREAM_NEW); > > + if (*o_stream == NULL) { > > + rc = SA_AIS_ERR_NO_MEMORY; > > + goto done; > > > > - if (stream == NULL) { > > + } > > + > > + err = lgs_populate_log_stream( > > + open_sync_param->logFileName, > > + open_sync_param->logFilePathName, > > + open_sync_param->maxLogFileSize, > > + open_sync_param->maxLogRecordSize, > > + open_sync_param->logFileFullAction, > > + open_sync_param->maxFilesRotated, > > + open_sync_param->logFileFmt, > > + STREAM_TYPE_APPLICATION, > > + twelveHourModeFlag, > > + 0, > > + *o_stream // output > > + ); > > + if (err == -1) { > > + log_stream_delete(o_stream); > > rc = SA_AIS_ERR_NO_MEMORY; > > goto done; > > } > > - *o_stream = stream; > > + > > + rc = lgs_create_rt_appstream(*o_stream); > > + if (rc != SA_AIS_OK) log_stream_delete(o_stream); > > > > done: > > TRACE_LEAVE(); > > @@ -926,7 +941,7 @@ static SaAisErrorT file_attribute_cmp(lg > > { > > SaAisErrorT rs = SA_AIS_OK; > > > > - TRACE_ENTER2("Stream: %s", applicationStream->name); > > + TRACE_ENTER2("Stream: %s", applicationStream->name.c_str()); > > > > if (open_sync_param->maxLogFileSize != applicationStream- > > >maxLogFileSize || > > open_sync_param->maxLogRecordSize != applicationStream- > > >fixedLogRecordSize || > > @@ -983,15 +998,14 @@ static uint32_t proc_stream_open_msg(lgs > > lgsv_msg_t msg; > > lgsv_stream_open_req_t *open_sync_param = &(evt- > > >info.msg.info.api_info.param.lstr_open_sync); > > log_stream_t *logStream; > > - char name[SA_MAX_NAME_LENGTH + 1]; > > + std::string name; > > time_t file_closetime = 0; > > int i_rc = 0; > > > > /* Create null-terminated stream name */ > > - memcpy(name, open_sync_param->lstr_name.value, > > open_sync_param->lstr_name.length); > > - memset(&name[open_sync_param->lstr_name.length], 0, > > SA_MAX_NAME_LENGTH + 1 - open_sync_param->lstr_name.length); > > + name = osaf_extended_name_borrow(&open_sync_param- > > >lstr_name); > > > > - TRACE_ENTER2("stream '%s', client_id %u", name, > > open_sync_param->client_id); > > + TRACE_ENTER2("stream '%s', client_id %u", name.c_str(), > > open_sync_param->client_id); > > > > logStream = log_stream_get_by_name(name); > > if (logStream != NULL) { > > @@ -1036,7 +1050,7 @@ static uint32_t proc_stream_open_msg(lgs > > ais_rv = SA_AIS_ERR_NOT_EXIST; > > goto snd_rsp; > > } > > - TRACE("%s Stream %s is recovered", > > __FUNCTION__, name); > > + TRACE("%s Stream %s is recovered", > > __FUNCTION__, name.c_str()); > > log_stream_print(logStream); /* TRACE */ > > lstr_id = logStream->streamId; > > goto snd_rsp; > > @@ -1112,6 +1126,7 @@ static uint32_t proc_stream_open_msg(lgs > > free(open_sync_param->logFileFmt); > > free(open_sync_param->logFilePathName); > > free(open_sync_param->logFileName); > > + osaf_extended_name_free(&open_sync_param->lstr_name); > > > > TRACE_LEAVE(); > > return rc; > > diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > > b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > > @@ -539,17 +539,17 @@ static int check_oldest(char *line, char > > int date, time, c, d; > > date = time = c = d = 0; > > int len = 0; > > - char name_format[SA_MAX_NAME_LENGTH]; > > + std::string name_format; > > char time_stamps[] = "_%d_%d_%d_%d.log"; > > > > len = strlen(time_stamps); > > len += fname_prefix_size; > > > > - strncpy(name_format, fname_prefix, fname_prefix_size); > > - name_format[fname_prefix_size] = '\0'; > > - TRACE_3("fname: %s", name_format); > > - strncat(name_format, time_stamps, SA_MAX_NAME_LENGTH-1); > > - if (sscanf(line, name_format, &date, &time, &c, &d) >= 2) { > > + name_format = std::string(fname_prefix); > > + TRACE_3("fname: %s", name_format.c_str()); > > + > > + name_format = name_format + time_stamps; > > + if (sscanf(line, name_format.c_str(), &date, &time, &c, &d) >= 2) { > > TRACE_3("%s: line: arg 1: %d 2: %d 3: %d 4: %d ok", > > __FUNCTION__, > > date, time, c, d); > > if (date < *old_date || *old_date == -1) { > > diff --git a/osaf/services/saf/logsv/lgs/lgs_fmt.cc > > b/osaf/services/saf/logsv/lgs/lgs_fmt.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_fmt.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_fmt.cc > > @@ -24,6 +24,7 @@ > > > > #include "lgs_fmt.h" > > #include "lgs.h" > > +#include "osaf_extended_name.h" > > > > /* Number of seconds per an hour/minute */ > > #define SECOND_PER_HOUR 3600L > > @@ -40,19 +41,23 @@ > > static SaInt32T checkFieldSize(SaStringT inputString, SaUint16T > > *numOfDigits) > > { > > SaInt32T result = 0; > > - SaInt8T dest[SA_MAX_NAME_LENGTH]; > > + std::string dest; > > char **endptr = NULL; > > + int maxDigitsNum = > > std::to_string(SA_LOG_MAX_RECORD_SIZE).size() + 1; > > > > - (void)strcpy(dest, ""); /* Init dest */ > > *numOfDigits = 0; > > + dest.clear(); > > > > /* Build string of characters */ > > - while ((isdigit(*inputString) != 0) && (*numOfDigits < > > SA_MAX_NAME_LENGTH)) { > > + while ((isdigit(*inputString) != 0) && (*numOfDigits < > > maxDigitsNum)) { > > + char c = *inputString; > > + dest += c; > > + inputString++; > > *numOfDigits = *numOfDigits + 1; > > - (void)strncat(dest, inputString++, sizeof(SaInt8T)); > > } > > > > - result = strtol(dest, endptr, 0); > > + result = strtol(dest.c_str(), endptr, 0); > > + > > return result; > > } > > > > @@ -1048,12 +1053,11 @@ static int extractNotificationField(char > > fieldSize = checkFieldSize(fmtExpPtr, &fieldSizeOffset); > > if (fieldSize == 0) { > > characters = snprintf(dest, dest_size, "%s", > > - logRecord- > > >logHeader.ntfHdr.notificationObject->value); > > + > > osaf_extended_name_borrow(logRecord- > > >logHeader.ntfHdr.notificationObject)); > > } else { > > - characters = snprintf(dest, dest_size, > > - "%*.*s", > > - (int) -fieldSize, > > - (int) fieldSize, logRecord- > > >logHeader.ntfHdr.notificationObject->value); > > + characters = snprintf(dest, dest_size, "%*.*s", (int) - > > fieldSize, > > + (int) fieldSize, > > + > > osaf_extended_name_borrow(logRecord- > > >logHeader.ntfHdr.notificationObject)); > > } > > > > *fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset; > > @@ -1063,13 +1067,12 @@ static int extractNotificationField(char > > /* Check field size and trunkate alternative pad with blanks > > */ > > fieldSize = checkFieldSize(fmtExpPtr, &fieldSizeOffset); > > if (fieldSize == 0) { > > - characters = snprintf(dest, > > - dest_size, "%s", logRecord- > > >logHeader.ntfHdr.notifyingObject->value); > > + characters = snprintf(dest, dest_size, "%s", > > + > > osaf_extended_name_borrow(logRecord- > > >logHeader.ntfHdr.notifyingObject)); > > } else { > > - characters = snprintf(dest, dest_size, > > - "%*.*s", > > - (int) -fieldSize, > > - (int) fieldSize, logRecord- > > >logHeader.ntfHdr.notifyingObject->value); > > + characters = snprintf(dest, dest_size, "%*.*s", (int) - > > fieldSize, > > + (int) fieldSize, > > + > > osaf_extended_name_borrow(logRecord- > > >logHeader.ntfHdr.notifyingObject)); > > } > > > > *fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset; > > @@ -1114,10 +1117,12 @@ static int extractSystemField(char *dest > > characters = snprintf(dest, dest_size, > > "%*.*s", > > (int)-fieldSize, > > - (int)fieldSize, logRecord- > > >logHeader.genericHdr.logSvcUsrName->value); > > + (int)fieldSize, > > + > > osaf_extended_name_borrow(logRecord- > > >logHeader.genericHdr.logSvcUsrName)); > > } else { > > characters = snprintf(dest, dest_size, > > - "%s", logRecord- > > >logHeader.genericHdr.logSvcUsrName->value); > > + "%s", > > + > > osaf_extended_name_borrow(logRecord- > > >logHeader.genericHdr.logSvcUsrName)); > > } > > *fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset; > > break; > > diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.cc > > b/osaf/services/saf/logsv/lgs/lgs_imm.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_imm.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_imm.cc > > @@ -248,7 +248,7 @@ static uint32_t ckpt_stream_config(log_s > > ckpt_v2.header.num_ckpt_records = 1; > > ckpt_v2.header.data_len = 1; > > > > - ckpt_v2.ckpt_rec.stream_cfg.name = (char *)stream->name; > > + ckpt_v2.ckpt_rec.stream_cfg.name = const_cast<char > > *>(stream->name.c_str()); > > ckpt_v2.ckpt_rec.stream_cfg.fileName = const_cast<char > > *>(stream->fileName.c_str()); > > ckpt_v2.ckpt_rec.stream_cfg.pathName = const_cast<char > > *>(stream->pathName.c_str()); > > ckpt_v2.ckpt_rec.stream_cfg.maxLogFileSize = stream- > > >maxLogFileSize; > > @@ -267,7 +267,7 @@ static uint32_t ckpt_stream_config(log_s > > ckpt_v1.header.num_ckpt_records = 1; > > ckpt_v1.header.data_len = 1; > > > > - ckpt_v1.ckpt_rec.stream_cfg.name = (char *)stream->name; > > + ckpt_v1.ckpt_rec.stream_cfg.name = const_cast<char > > *>(stream->name.c_str()); > > ckpt_v1.ckpt_rec.stream_cfg.fileName = const_cast<char > > *>(stream->fileName.c_str()); > > ckpt_v1.ckpt_rec.stream_cfg.pathName = const_cast<char > > *>(stream->pathName.c_str()); > > ckpt_v1.ckpt_rec.stream_cfg.maxLogFileSize = stream- > > >maxLogFileSize; > > @@ -389,17 +389,17 @@ static void adminOperationCallback(SaImm > > const SaImmAdminOperationParamsT_2 *param = params[0]; > > log_stream_t *stream; > > SaAisErrorT ais_rc = SA_AIS_OK; > > - > > - TRACE_ENTER2("%s", objectName->value); > > + SaConstStringT objName = > > osaf_extended_name_borrow(objectName); > > + > > + TRACE_ENTER2("%s", objName); > > > > if (lgs_cb->ha_state != SA_AMF_HA_ACTIVE) { > > LOG_ER("admin op callback in applier"); > > goto done; > > } > > > > - if ((stream = log_stream_get_by_name((char *)objectName- > > >value)) == NULL) { > > - report_om_error(immOiHandle, invocation, "Stream %s not > > found", > > - objectName->value); > > + if ((stream = log_stream_get_by_name(objName)) == NULL) { > > + report_om_error(immOiHandle, invocation, "Stream %s not > > found", objName); > > goto done; > > } > > > > @@ -467,12 +467,12 @@ static void adminOperationCallback(SaImm > > goto done; > > } > > > > - TRACE("Changing severity for stream %s to %u", stream- > > >name, severityFilter); > > + TRACE("Changing severity for stream %s to %u", stream- > > >name.c_str(), severityFilter); > > stream->severityFilter = severityFilter; > > > > ais_rc = immutil_update_one_rattr( > > immOiHandle, > > - reinterpret_cast<const char *>(objectName->value), > > + objName, > > > > const_cast<SaImmAttrNameT>("saLogStreamSeverityFilter"), > > SA_IMM_ATTR_SAUINT32T, > > &stream->severityFilter); > > @@ -505,8 +505,9 @@ static SaAisErrorT ccbObjectDeleteCallba > > { > > SaAisErrorT rc = SA_AIS_OK; > > struct CcbUtilCcbData *ccbUtilCcbData; > > - > > - TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value); > > + SaConstStringT objName = > > osaf_extended_name_borrow(objectName); > > + > > + TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objName); > > > > if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) { > > if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) { > > @@ -530,9 +531,10 @@ static SaAisErrorT ccbObjectCreateCallba > > { > > SaAisErrorT rc = SA_AIS_OK; > > struct CcbUtilCcbData *ccbUtilCcbData; > > + SaConstStringT parName = > > osaf_extended_name_borrow(parentName); > > > > TRACE_ENTER2("CCB ID %llu, class '%s', parent '%s'", > > - ccbId, className, parentName->value); > > + ccbId, className, parName); > > > > if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) { > > if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) { > > @@ -565,8 +567,9 @@ static SaAisErrorT ccbObjectModifyCallba > > { > > SaAisErrorT rc = SA_AIS_OK; > > struct CcbUtilCcbData *ccbUtilCcbData; > > - > > - TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value); > > + SaConstStringT objName = > > osaf_extended_name_borrow(objectName); > > + > > + TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objName); > > > > if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) { > > if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) { > > @@ -745,8 +748,8 @@ static SaAisErrorT config_ccb_completed_ > > }; > > > > char oi_err_str[256]; > > - > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > + SaConstStringT objName = osaf_extended_name_borrow(&opdata- > > >objectName); > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName); > > > > attrMod = opdata->param.modify.attrMods[i++]; > > while (attrMod != NULL) { > > @@ -765,7 +768,7 @@ static SaAisErrorT config_ccb_completed_ > > (attribute->attrValuesNumber == 0)) { > > report_oi_error(immOiHandle, opdata- > > >ccbId, > > "deletion of value is not allowed for > > attribute %s stream %s", > > - attribute->attrName, opdata- > > >objectName.value); > > + attribute->attrName, > > objName); > > ais_rc = SA_AIS_ERR_BAD_OPERATION; > > goto done; > > } > > @@ -1044,6 +1047,7 @@ bool chk_filepath_stream_exist( > > log_stream_t *i_stream = NULL; > > std::string i_fileName; > > std::string i_pathName; > > + int num; > > bool rc = false; > > > > TRACE_ENTER(); > > @@ -1093,15 +1097,17 @@ bool chk_filepath_stream_exist( > > > > /* Check if any stream has given filename and path */ > > TRACE("Check if any stream has given filename and path"); > > - i_stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + i_stream = log_stream_get_by_id(--num); > > while (i_stream != NULL) { > > - TRACE("Check stream \"%s\"", i_stream->name); > > + TRACE("Check stream \"%s\"", i_stream->name.c_str()); > > if ((i_stream->fileName == i_fileName) && > > (i_stream->pathName == i_pathName)) { > > rc = true; > > break; > > } > > - i_stream = log_stream_getnext_by_name(i_stream- > > >name); > > + > > + i_stream = log_stream_get_by_id(--num); > > } > > > > TRACE_LEAVE2("rc = %d", rc); > > @@ -1317,8 +1323,8 @@ static SaAisErrorT check_attr_validity(S > > */ > > if (opdata->operationType == CCBUTIL_MODIFY) { > > TRACE("Validate for MODIFY"); > > - stream = log_stream_get_by_name( > > - (char *) opdata->param.modify.objectName- > > >value); > > + SaConstStringT objName = > > osaf_extended_name_borrow(opdata->param.modify.objectName); > > + stream = log_stream_get_by_name(objName); > > if (stream == NULL) { > > /* No stream to modify */ > > report_oi_error(immOiHandle, opdata->ccbId, > > @@ -1687,7 +1693,7 @@ static SaAisErrorT stream_ccb_completed_ > > { > > SaAisErrorT rc; > > > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > osaf_extended_name_borrow(&opdata->objectName)); > > rc = check_attr_validity(immOiHandle, opdata); > > TRACE_LEAVE2("rc = %u", rc); > > return rc; > > @@ -1703,9 +1709,9 @@ static SaAisErrorT stream_ccb_completed_ > > { > > SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION; > > > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > - > > - const char *name = (char*) opdata->param.delete_.objectName- > > >value; > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > osaf_extended_name_borrow(&opdata->objectName)); > > + > > + SaConstStringT name = osaf_extended_name_borrow(opdata- > > >param.delete_.objectName); > > log_stream_t *stream = log_stream_get_by_name(name); > > > > if (stream != NULL) { > > @@ -1728,8 +1734,7 @@ static SaAisErrorT stream_ccb_completed_ > > > > rc = SA_AIS_OK; > > } else { > > - report_oi_error(immOiHandle, opdata->ccbId, > > - "stream %s not found", name); > > + report_oi_error(immOiHandle, opdata->ccbId, "stream %s > > not found", name); > > } > > > > done: > > @@ -1806,7 +1811,7 @@ static SaAisErrorT ccbCompletedCallback( > > break; > > case CCBUTIL_DELETE: > > case CCBUTIL_MODIFY: > > - if (!strncmp((char*)opdata->objectName.value, > > "safLgStrCfg", 11)) { > > + if > > (!strncmp(osaf_extended_name_borrow(&opdata->objectName), > > "safLgStrCfg", 11)) { > > rc = stream_ccb_completed(immOiHandle, > > opdata); > > } else { > > rc = config_ccb_completed(immOiHandle, > > opdata); > > @@ -1854,10 +1859,12 @@ void logRootDirectory_filemove( > > TRACE_ENTER(); > > log_stream_t *stream; > > std::string current_logfile; > > + int num; > > > > /* Close and rename files at current path > > */ > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > TRACE("Handling file %s", stream->logFileCurrent.c_str()); > > > > @@ -1873,18 +1880,19 @@ void logRootDirectory_filemove( > > old_logRootDirectory, stream, > > current_logfile, > > cur_time_in) != 0) { > > LOG_ER("Old log files could not be renamed and > > closed for stream: %s", > > - stream->name); > > + stream->name.c_str()); > > } > > - stream = log_stream_getnext_by_name(stream->name); > > + stream = log_stream_get_by_id(--num); > > } > > > > /* Create new files at new path > > */ > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > if (lgs_create_config_file_h(new_logRootDirectory, stream) > > != 0) { > > LOG_ER("New config file could not be created for > > stream: %s", > > - stream->name); > > + stream->name.c_str()); > > } > > > > /* Create the new log file based on updated configuration */ > > @@ -1894,14 +1902,14 @@ void logRootDirectory_filemove( > > if ((*stream->p_fd = log_file_open(new_logRootDirectory, > > stream, stream->logFileCurrent, NULL)) == -1) { > > LOG_ER("New log file could not be created for > > stream: %s", > > - stream->name); > > + stream->name.c_str()); > > } > > > > /* Also update standby current file name > > * Used if standby and configured for split file system > > */ > > stream->stb_logFileCurrent = stream->logFileCurrent; > > - stream = log_stream_getnext_by_name(stream->name); > > + stream = log_stream_get_by_id(--num); > > } > > TRACE_LEAVE(); > > } > > @@ -1918,6 +1926,7 @@ void logDataGroupname_fileown(const char > > { > > TRACE_ENTER(); > > log_stream_t *stream; > > + int num; > > > > if (new_logDataGroupname == NULL) { > > LOG_ER("Data group is NULL"); > > @@ -1929,10 +1938,11 @@ void logDataGroupname_fileown(const char > > /* Not attribute values deletion > > * Change ownership of log files to this new group > > */ > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > lgs_own_log_files_h(stream, > > new_logDataGroupname); > > - stream = log_stream_getnext_by_name(stream- > > >name); > > + stream = log_stream_get_by_id(--num); > > } > > } > > TRACE_LEAVE(); > > @@ -1993,7 +2003,7 @@ static void config_ccb_apply_modify(cons > > /* Flag set if any of the mailbox limit values have changed */ > > bool mailbox_lim_upd = false; > > > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > osaf_extended_name_borrow(&opdata->objectName)); > > > > attrMod = opdata->param.modify.attrMods[i++]; > > while (attrMod != NULL) { > > @@ -2141,7 +2151,7 @@ static SaAisErrorT stream_create_and_con > > SaAisErrorT rc = SA_AIS_OK; > > *stream = NULL; > > int i = 0; > > - SaNameT objectName; > > + std::string objectName; > > std::string fileName; > > std::string pathName; > > > > @@ -2150,16 +2160,15 @@ static SaAisErrorT stream_create_and_con > > while (ccb->param.create.attrValues[i] != NULL) { > > if (!strncmp(ccb->param.create.attrValues[i]->attrName, > > "safLgStrCfg", > > sizeof("safLgStrCfg"))) { > > - if (ccb->param.create.parentName->length > 0) { > > - objectName.length = snprintf((char*) > > objectName.value, sizeof(objectName.value), > > - "%s,%s", *(const SaStringT*) > > ccb->param.create.attrValues[i]->attrValues[0], > > - ccb- > > >param.create.parentName->value); > > + SaConstStringT parentName = > > osaf_extended_name_borrow(ccb->param.create.parentName); > > + if (strlen(parentName) > 0) { > > + objectName = std::string(*(const SaStringT*) > > ccb->param.create.attrValues[i]->attrValues[0]) > > + + "," + parentName ; > > } else { > > - objectName.length = snprintf((char*) > > objectName.value, sizeof(objectName.value), > > - "%s", *(const SaStringT*) > ccb- > > >param.create.attrValues[i]->attrValues[0]); > > + objectName = std::string(*(const SaStringT*) > > ccb->param.create.attrValues[i]->attrValues[0]); > > } > > > > - if ((*stream = log_stream_new_2(&objectName, > > STREAM_NEW)) == NULL) { > > + if ((*stream = log_stream_new(objectName, > > STREAM_NEW)) == NULL) { > > rc = SA_AIS_ERR_NO_MEMORY; > > goto done; > > } > > @@ -2203,7 +2212,7 @@ static SaAisErrorT stream_create_and_con > > SaBoolT dummy; > > char *logFileFormat = *((char **) value); > > if > > (!lgs_is_valid_format_expression(logFileFormat, (*stream)->streamType, > > &dummy)) { > > - LOG_WA("Invalid logFileFormat for > > stream %s, using default", (*stream)->name); > > + LOG_WA("Invalid logFileFormat for > > stream %s, using default", (*stream)->name.c_str()); > > logFileFormat = const_cast<char > > *>(static_cast<const char *>( > > > > lgs_cfg_get(LGS_IMM_LOG_STREAM_FILE_FORMAT))); > > } > > @@ -2236,16 +2245,16 @@ static SaAisErrorT stream_create_and_con > > } > > > > /* Update creation timestamp */ > > - rc = immutil_update_one_rattr(lgs_cb->immOiHandle, > > reinterpret_cast<const char *>(objectName.value), > > - > > const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), > > SA_IMM_ATTR_SATIMET, > > - &(*stream)->creationTimeStamp); > > + rc = immutil_update_one_rattr(lgs_cb->immOiHandle, > > objectName.c_str(), > > + > > const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), > > SA_IMM_ATTR_SATIMET, > > + &(*stream)->creationTimeStamp); > > if (rc != SA_AIS_OK) { > > LOG_ER("immutil_update_one_rattr failed %s", > > saf_error(rc)); > > osaf_abort(0); > > } > > > > done: > > - TRACE_LEAVE(); > > + TRACE_LEAVE2("rc: %s", saf_error(rc)); > > return rc; > > } > > > > @@ -2254,7 +2263,7 @@ static void stream_ccb_apply_create(cons > > SaAisErrorT rc; > > log_stream_t *stream; > > > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, > > osaf_extended_name_borrow(&opdata->objectName)); > > > > if ((rc = stream_create_and_configure1(opdata, &stream)) == > > SA_AIS_OK) { > > log_stream_open_fileinit(stream); > > @@ -2276,10 +2285,10 @@ static void stream_ccb_apply_modify(cons > > struct timespec curtime_tspec; > > std::string fileName; > > bool modify = false; > > - > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > - > > - stream = log_stream_get_by_name((char*)opdata- > > >objectName.value); > > + SaConstStringT objName = osaf_extended_name_borrow(&opdata- > > >objectName); > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName); > > + > > + stream = log_stream_get_by_name(objName); > > osafassert(stream); > > > > current_logfile_name = stream->logFileCurrent; > > @@ -2384,10 +2393,11 @@ static void stream_ccb_apply_delete(cons > > struct timespec closetime_tspec; > > osaf_clock_gettime(CLOCK_REALTIME, &closetime_tspec); > > time_t file_closetime = closetime_tspec.tv_sec; > > - > > - TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata- > > >objectName.value); > > - > > - stream = log_stream_get_by_name((char *) opdata- > > >objectName.value); > > + SaConstStringT objName = osaf_extended_name_borrow(&opdata- > > >objectName); > > + > > + TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName); > > + > > + stream = log_stream_get_by_name(objName); > > > > /* Checkpoint to standby LOG server */ > > ckpt_stream_close(stream, file_closetime); > > @@ -2448,7 +2458,7 @@ static void ccbApplyCallback(SaImmOiHand > > break; > > case CCBUTIL_DELETE: > > case CCBUTIL_MODIFY: > > - if (!strncmp((char*)opdata->objectName.value, > > "safLgStrCfg", 11)) > > + if > > (!strncmp(osaf_extended_name_borrow(&opdata->objectName), > > "safLgStrCfg", 11)) > > stream_ccb_apply(opdata); > > else > > config_ccb_apply(opdata); > > @@ -2495,8 +2505,8 @@ static SaAisErrorT rtAttrUpdateCallback( > > SaAisErrorT rc = SA_AIS_ERR_FAILED_OPERATION; > > SaImmAttrNameT attributeName; > > int i = 0; > > - > > - TRACE_ENTER2("%s", objectName->value); > > + SaConstStringT objName = > > osaf_extended_name_borrow(objectName); > > + TRACE_ENTER2("%s", objName); > > > > if (lgs_cb->ha_state != SA_AMF_HA_ACTIVE) { > > LOG_ER("admin op callback in applier"); > > @@ -2504,17 +2514,16 @@ static SaAisErrorT rtAttrUpdateCallback( > > } > > > > /* Handle configuration runtime object */ > > - if (strncmp((char *) objectName->value, > > LGS_CFG_RUNTIME_OBJECT, > > - objectName->length) == 0) { > > + if (strncmp(objName, LGS_CFG_RUNTIME_OBJECT, > > strlen(objName)) == 0) { > > /* Handle Runtome configuration object */ > > conf_runtime_obj_hdl(immOiHandle, attributeNames); > > } else { > > > > /* Handle stream object if valid > > */ > > - log_stream_t *stream = log_stream_get_by_name((char > > *)objectName->value); > > + log_stream_t *stream = > > log_stream_get_by_name(objName); > > if (stream == NULL) { > > - LOG_ER("%s: stream %s not found", __FUNCTION__, > > objectName->value); > > + LOG_ER("%s: stream %s not found", __FUNCTION__, > > objName); > > goto done; > > } > > > > @@ -2523,12 +2532,12 @@ static SaAisErrorT rtAttrUpdateCallback( > > rc = SA_AIS_OK; > > if (!strcmp(attributeName, > > "saLogStreamNumOpeners")) { > > rc = > > immutil_update_one_rattr(immOiHandle, > > - (char *)objectName->value, > > + objName, > > attributeName, > > SA_IMM_ATTR_SAUINT32T, > > &stream->numOpeners); > > } else if (!strcmp(attributeName, > > "logStreamDiscardedCounter")) { > > rc = > > immutil_update_one_rattr(immOiHandle, > > - (char *) objectName->value, > > + objName, > > attributeName, > > SA_IMM_ATTR_SAUINT64T, > > &stream->filtered); > > } else { > > @@ -2562,7 +2571,7 @@ done: > > * > > * @return SaAisErrorT > > */ > > -static SaAisErrorT stream_create_and_configure(const char *dn, > > +static SaAisErrorT stream_create_and_configure(const std::string &dn, > > log_stream_t **in_stream, int stream_id, > > SaImmAccessorHandleT accessorHandle) > > { > > @@ -2586,23 +2595,22 @@ static SaAisErrorT stream_create_and_con > > NULL > > }; > > > > - TRACE_ENTER2("(%s)", dn); > > - > > - strncpy((char *)objectName.value, dn, SA_MAX_NAME_LENGTH); > > - objectName.length = strlen((char *)objectName.value); > > - > > - *in_stream = stream = log_stream_new_2(&objectName, > > stream_id); > > + TRACE_ENTER2("(%s)", dn.c_str()); > > + > > + osaf_extended_name_lend(dn.c_str(), &objectName); > > + > > + *in_stream = stream = log_stream_new(dn, stream_id); > > > > if (stream == NULL) { > > rc = SA_AIS_ERR_NO_MEMORY; > > goto done; > > } > > > > - if (strcmp(dn, SA_LOG_STREAM_ALARM) == 0) > > + if (dn == SA_LOG_STREAM_ALARM) > > stream->streamType = STREAM_TYPE_ALARM; > > - else if (strcmp(dn , SA_LOG_STREAM_NOTIFICATION) == 0) > > + else if (dn == SA_LOG_STREAM_NOTIFICATION) > > stream->streamType = STREAM_TYPE_NOTIFICATION; > > - else if (strcmp(dn , SA_LOG_STREAM_SYSTEM) == 0) > > + else if (dn == SA_LOG_STREAM_SYSTEM) > > stream->streamType = STREAM_TYPE_SYSTEM; > > else > > stream->streamType = STREAM_TYPE_APPLICATION; > > @@ -2612,7 +2620,7 @@ static SaAisErrorT stream_create_and_con > > accessorHandle, > > &objectName, > > attribute_names, &attributes)) != SA_AIS_OK) { > > - LOG_ER("Configuration for %s not found: %s", > > objectName.value, saf_error(rc)); > > + LOG_ER("Configuration for %s not found: %s", dn.c_str(), > > saf_error(rc)); > > rc = SA_AIS_ERR_NOT_EXIST; > > goto done; > > } > > @@ -2651,7 +2659,7 @@ static SaAisErrorT stream_create_and_con > > SaBoolT dummy; > > char *logFileFormat = *((char **)value); > > if (!lgs_is_valid_format_expression(logFileFormat, > > stream->streamType, &dummy)) { > > - LOG_WA("Invalid logFileFormat for stream > > %s, using default", stream->name); > > + LOG_WA("Invalid logFileFormat for stream > > %s, using default", stream->name.c_str()); > > > > if (stream->streamType == > > STREAM_TYPE_APPLICATION) { > > logFileFormat = const_cast<char > > *>(static_cast<const char*>( > > @@ -2696,7 +2704,7 @@ static SaAisErrorT stream_create_and_con > > } > > > > done: > > - TRACE_LEAVE(); > > + TRACE_LEAVE2("rc: %s", saf_error(rc)); > > return rc; > > } > > > > @@ -2734,7 +2742,7 @@ SaAisErrorT lgs_imm_init_configStreams(l > > SaImmAttrValuesT_2 **attributes; > > int wellknownStreamId = 0; > > int appStreamId = 3; > > - int streamId = 0; > > + int streamId = 0, num; > > SaNameT objectName; > > const char *className = "SaLogStreamConfig"; > > > > @@ -2775,9 +2783,9 @@ SaAisErrorT lgs_imm_init_configStreams(l > > * > > * With well-known streams, stream ID is in reserved > > numbers [0-2]. > > */ > > - streamId = is_well_know_stream((char > > *)objectName.value)? wellknownStreamId++:appStreamId++; > > - ais_rc = stream_create_and_configure((char*) > > objectName.value, > > - &stream, streamId, accessorHandle); > > + SaConstStringT name = > > osaf_extended_name_borrow(&objectName); > > + streamId = is_well_know_stream(name)? > > wellknownStreamId++:appStreamId++; > > + ais_rc = stream_create_and_configure(name, > > &stream, streamId, accessorHandle); > > if (ais_rc != SA_AIS_OK) { > > LOG_WA("stream_create_and_configure > > failed %d", ais_rc); > > goto done; > > @@ -2798,7 +2806,8 @@ SaAisErrorT lgs_imm_init_configStreams(l > > osaf_abort(0); > > } > > > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { > > if (cb->scAbsenceAllowed != 0) { > > int_rc = log_stream_open_file_restore(stream); > > @@ -2817,7 +2826,7 @@ SaAisErrorT lgs_imm_init_configStreams(l > > } > > > > ais_rc = immutil_update_one_rattr( > > - cb->immOiHandle, stream->name, > > + cb->immOiHandle, stream->name.c_str(), > > > > const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), > > SA_IMM_ATTR_SATIMET, > > &stream->creationTimeStamp); > > @@ -2826,7 +2835,7 @@ SaAisErrorT lgs_imm_init_configStreams(l > > osaf_abort(0); > > } > > > > - stream = log_stream_getnext_by_name(stream->name); > > + stream = log_stream_get_by_id(--num); > > } > > > > done: > > @@ -2846,7 +2855,7 @@ SaAisErrorT lgs_imm_init_configStreams(l > > LOG_NO("%s immutil_saImmOmFinalize() Fail > > %d",__FUNCTION__, om_rc); > > } > > > > - TRACE_LEAVE(); > > + TRACE_LEAVE2("rc: %s", saf_error(ais_rc)); > > return ais_rc; > > } > > > > @@ -2888,7 +2897,7 @@ void lgs_imm_init_OI_handle(SaImmOiHandl > > lgs_exit("saImmOiSelectionObjectGet failed", > > SA_AMF_COMPONENT_RESTART); > > } > > > > - TRACE_LEAVE(); > > + TRACE_LEAVE2("rc: %s", saf_error(rc)); > > } > > > > /** > > @@ -2991,8 +3000,8 @@ static SaAisErrorT imm_impl_set_sequence > > } > > > > done: > > + TRACE_LEAVE2("rc: %s", saf_error(rc)); > > return rc; > > - TRACE_LEAVE(); > > } > > > > /** > > @@ -3136,13 +3145,10 @@ void lgs_search_stream_objects() > > searchParam.searchOneAttr.attrName = const_cast<char > > *>("SaImmAttrClassName"); > > searchParam.searchOneAttr.attrValueType = > > SA_IMM_ATTR_SASTRINGT; > > searchParam.searchOneAttr.attrValue = &class_name; > > - SaNameT root_name; > > - root_name.value[0] = '\0'; > > - root_name.length = 1; > > > > ais_rc = immutil_saImmOmSearchInitialize_2( > > immOmHandle, > > - &root_name, > > + NULL, > > SA_IMM_SUBTREE, > > SA_IMM_SEARCH_ONE_ATTR | > > SA_IMM_SEARCH_GET_NO_ATTR, > > &searchParam, > > @@ -3164,13 +3170,13 @@ void lgs_search_stream_objects() > > } > > > > while (ais_rc == SA_AIS_OK) { > > - TRACE("\tFound object \"%s\"", reinterpret_cast<char > > *>(object_name.value)); > > + SaConstStringT objName = > > osaf_extended_name_borrow(&object_name); > > + TRACE("\tFound object \"%s\"", objName); > > /* Add the string to the list > > */ > > - rc = log_rtobj_list_add(reinterpret_cast<char > > *>(object_name.value)); > > + rc = log_rtobj_list_add(objName); > > if (rc == -1) { > > - TRACE("%s Could not add %s to list Fail", > > - __FUNCTION__, reinterpret_cast<char > > *>(object_name.value)); > > + TRACE("%s Could not add %s to list Fail", > > __FUNCTION__, objName); > > } > > > > /* Get next object */ > > @@ -3199,33 +3205,29 @@ done_fin_Om: > > } > > > > done: > > - > > - TRACE_LEAVE(); > > + TRACE_LEAVE2("rc: %s", saf_error(ais_rc)); > > } > > > > -void lgs_delete_one_stream_object(char *name_str) > > +void lgs_delete_one_stream_object(const std::string &name_str) > > { > > SaAisErrorT ais_rc = SA_AIS_OK; > > SaNameT object_name; > > > > - if (name_str == NULL) { > > + if (name_str.empty() == true) { > > TRACE("%s No object name given", __FUNCTION__); > > return; > > } > > > > /* Copy name to a SaNameT */ > > - (void) strncpy(reinterpret_cast<char *>(object_name.value), > > - name_str, SA_MAX_NAME_LENGTH); > > - object_name.length = strlen(name_str) + 1; > > + osaf_extended_name_lend(name_str.c_str(), &object_name); > > > > /* and delete the object */ > > ais_rc = immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle, > > &object_name); > > if (ais_rc == SA_AIS_OK) { > > - TRACE("%s Object \"%s\" deleted", __FUNCTION__, > > - reinterpret_cast<char *>(object_name.value)); > > + TRACE("%s Object \"%s\" deleted", __FUNCTION__, > > name_str.c_str()); > > } else { > > LOG_WA("%s saImmOiRtObjectDelete for \"%s\" FAILED > > %d", > > - __FUNCTION__, reinterpret_cast<char > > *>(object_name.value), ais_rc); > > + __FUNCTION__, name_str.c_str(), ais_rc); > > } > > } > > > > @@ -3261,19 +3263,14 @@ void lgs_cleanup_abandoned_streams() > > */ > > if (name_str != NULL) { > > /* Copy name to a SaNameT */ > > - (void) strncpy(reinterpret_cast<char > > *>(object_name.value), > > - name_str, SA_MAX_NAME_LENGTH); > > - object_name.length = strlen(name_str) + 1; > > + osaf_extended_name_lend(name_str, > > &object_name); > > /* and delete the object */ > > - ais_rc = immutil_saImmOiRtObjectDelete(lgs_cb- > > >immOiHandle, > > - &object_name); > > + ais_rc = immutil_saImmOiRtObjectDelete(lgs_cb- > > >immOiHandle, &object_name); > > if (ais_rc == SA_AIS_OK) { > > - TRACE("\tObject \"%s\" deleted", > > - reinterpret_cast<char > > *>(object_name.value)); > > + TRACE("\tObject \"%s\" deleted", name_str); > > } else { > > LOG_WA("%s saImmOiRtObjectDelete for > > \"%s\" FAILED %d", > > - __FUNCTION__, > > - reinterpret_cast<char > > *>(object_name.value), ais_rc); > > + __FUNCTION__, name_str, ais_rc); > > } > > } else { > > /* Should never happen! */ > > @@ -3297,8 +3294,9 @@ void lgs_cleanup_abandoned_streams() > > * @param immOmHandle[out] > > * @return -1 on error > > */ > > -int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out, char > > *object_name_in, > > - SaImmHandleT *immOmHandle) > > +int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out, > > + const std::string &object_name_in, > > + SaImmHandleT *immOmHandle) > > { > > int rc = 0; > > SaAisErrorT ais_rc = SA_AIS_OK; > > @@ -3317,10 +3315,10 @@ int lgs_get_streamobj_attr(SaImmAttrValu > > NULL > > }; > > > > - TRACE_ENTER2("object_name_in \"%s\"", object_name_in); > > + TRACE_ENTER2("object_name_in \"%s\"", object_name_in.c_str()); > > > > SaNameT object_name; > > - if (object_name_in == NULL) { > > + if (object_name_in.empty() == true) { > > TRACE("%s No object name given (NULL)", __FUNCTION__); > > rc = -1; > > goto done; > > @@ -3345,9 +3343,7 @@ int lgs_get_streamobj_attr(SaImmAttrValu > > goto done; > > } > > > > - strncpy(reinterpret_cast<char *>(object_name.value), > > - object_name_in, SA_MAX_NAME_LENGTH); > > - object_name.length = strlen(reinterpret_cast<char > > *>(object_name.value)) + 1; > > + osaf_extended_name_lend(object_name_in.c_str(), > > &object_name); > > > > ais_rc = immutil_saImmOmAccessorGet_2(accessorHandle, > > &object_name, > > attribute_names, attrib_out); > > @@ -3421,12 +3417,10 @@ SaUint32T *lgs_get_scAbsenceAllowed_attr > > const_cast<char *>("scAbsenceAllowed"), > > NULL > > }; > > - char object_name_str[] = > > "opensafImm=opensafImm,safApp=safImmService"; > > + std::string object_name_str = > > "opensafImm=opensafImm,safApp=safImmService"; > > > > SaNameT object_name; > > - strncpy(reinterpret_cast<char *>(object_name.value), > > - object_name_str, SA_MAX_NAME_LENGTH); > > - object_name.length = strlen(reinterpret_cast<char > > *>(object_name.value)) + 1; > > + osaf_extended_name_lend(object_name_str.c_str(), > > &object_name); > > > > /* Default restore handling shall be disabled. Is enabled if the > > * scAbsenceAllowed attribute is not empty > > diff --git a/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc > > b/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc > > @@ -30,7 +30,7 @@ > > #include "immutil.h" > > #include "osaf_time.h" > > #include "osaf_poll.h" > > - > > +#include "osaf_extended_name.h" > > /* > > * Implements an IMM applier for the OpensafConfig class. > > * Used for detecting changes of opensafNetworkName attribute. > > @@ -362,7 +362,7 @@ static SaAisErrorT ccbObjectModifyCallba > > SaAisErrorT rc = SA_AIS_OK; > > struct CcbUtilCcbData *ccbUtilCcbData; > > > > - TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value); > > + TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, > > osaf_extended_name_borrow(objectName)); > > > > if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) { > > if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) { > > @@ -414,6 +414,7 @@ static void ccbApplyCallback(SaImmOiHand > > const SaImmAttrModificationT_2 *attrMod; > > char *value_str = NULL; > > int i = 0; > > + SaConstStringT objName; > > > > TRACE_ENTER2("CCB ID %llu", ccbId); > > > > @@ -432,10 +433,9 @@ static void ccbApplyCallback(SaImmOiHand > > goto done; > > } > > > > - if (strncmp(reinterpret_cast<char *>(opdata->objectName.value), > > - "opensafConfigId", sizeof("opensafConfigId") - 1) != 0) { > > - TRACE("Object \"%s\" not a OpensafConfig object", > > - reinterpret_cast<char *>(opdata->objectName.value)); > > + objName = osaf_extended_name_borrow(&opdata->objectName); > > + if (strncmp(objName, "opensafConfigId", sizeof("opensafConfigId") - > > 1) != 0) { > > + TRACE("Object \"%s\" not a OpensafConfig object", > > objName); > > goto done; > > } > > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_main.cc > > b/osaf/services/saf/logsv/lgs/lgs_main.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_main.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_main.cc > > @@ -481,7 +481,12 @@ int main(int argc, char *argv[]) > > const time_t CLEAN_TIMEOUT = 600; /* 10 min */ > > > > daemonize(argc, argv); > > - > > + > > + if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0 ) { > > + LOG_ER("Failed to set SA_ENABLE_EXTENDED_NAMES (%s)", > > strerror(errno)); > > + goto done; > > + } > > + > > if (log_initialize() != NCSCC_RC_SUCCESS) { > > LOG_ER("log_initialize failed"); > > goto done; > > diff --git a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc > > @@ -268,6 +268,8 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c > > { > > TRACE_ENTER(); > > NCS_MBCSV_ARG mbcsv_arg; > > + int num; > > + > > memset(&mbcsv_arg, '\0', sizeof(NCS_MBCSV_ARG)); > > > > /* Set the mbcsv args */ > > @@ -289,7 +291,8 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c > > */ > > log_stream_t *stream; > > if (lgs_is_split_file_system()) { > > - stream = log_stream_getnext_by_name(NULL); > > + num = get_number_of_streams(); > > + stream = log_stream_get_by_id(--num); > > while (stream != NULL) { /* Iterate over all streams */ > > if (ha_state == SA_AMF_HA_ACTIVE) { > > stream->logFileCurrent = stream- > > >stb_logFileCurrent; > > @@ -302,7 +305,7 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c > > *stream->p_fd = -1; /* Reopen files */ > > } > > > > - stream = log_stream_getnext_by_name(stream- > > >name); > > + stream = log_stream_get_by_id(--num); > > } > > } > > > > @@ -598,7 +601,7 @@ uint32_t lgs_ckpt_stream_open_set(log_st > > stream_open->logPath = const_cast<char *>(logStream- > > >pathName.c_str()); > > stream_open->logFileCurrent = const_cast<char *>(logStream- > > >logFileCurrent.c_str()); > > stream_open->fileFmt = logStream->logFileFormat; > > - stream_open->logStreamName = logStream->name; > > + stream_open->logStreamName = const_cast<char *>(logStream- > > >name.c_str()); > > stream_open->maxFileSize = logStream->maxLogFileSize; > > stream_open->maxLogRecordSize = logStream->fixedLogRecordSize; > > stream_open->logFileFullAction = logStream->logFullAction; > > @@ -625,6 +628,7 @@ static uint32_t edu_enc_streams(lgs_cb_t > > uint32_t rc = NCSCC_RC_SUCCESS, num_rec = 0; > > uint8_t *pheader = NULL; > > lgsv_ckpt_header_t ckpt_hdr; > > + int num; > > > > /* Prepare reg. structure to encode */ > > ckpt_stream_rec = static_cast<lgs_ckpt_stream_open_t > > *>(malloc(sizeof(lgs_ckpt_stream_open_t))); > > @@ -641,8 +645,9 @@ static uint32_t edu_enc_streams(lgs_cb_t > > return (rc = EDU_ERR_MEM_FAIL); > > } > > ncs_enc_claim_space(uba, sizeof(lgsv_ckpt_header_t)); > > - log_stream_rec = log_stream_getnext_by_name(NULL); > > > > + num = get_number_of_streams(); > > + log_stream_rec = log_stream_get_by_id(--num); > > /* Walk through the reg list and encode record by record */ > > while (log_stream_rec != NULL) { > > lgs_ckpt_stream_open_set(log_stream_rec, > > ckpt_stream_rec); > > @@ -656,7 +661,7 @@ static uint32_t edu_enc_streams(lgs_cb_t > > return rc; > > } > > ++num_rec; > > - log_stream_rec = > > log_stream_getnext_by_name(log_stream_rec->name); > > + log_stream_rec = log_stream_get_by_id(--num); > > } /* End while RegRec */ > > > > /* Encode RegHeader */ > > @@ -1581,8 +1586,8 @@ static void insert_localmsg_in_stream(lo > > > > /* Construct logSvcUsrName for log service */ > > SaNameT logSvcUsrName; > > - sprintf((char *)logSvcUsrName.value, "%s", > > "safApp=safLogService"); > > - logSvcUsrName.length = strlen((char *)logSvcUsrName.value); > > + SaConstStringT tmpSvcName = "safApp=safLogService"; > > + osaf_extended_name_lend(tmpSvcName, &logSvcUsrName); > > > > /* Create a log header corresponding to type of stream */ > > if ((stream->streamType == STREAM_TYPE_ALARM) || > > @@ -1834,7 +1839,7 @@ static uint32_t ckpt_proc_close_stream(l > > goto done; > > } > > > > - TRACE("close stream %s, id: %u", stream->name, stream->streamId); > > + TRACE("close stream %s, id: %u", stream->name.c_str(), stream- > > >streamId); > > > > if ((stream->numOpeners > 0) || (clientId < 0)){ > > /* No clients to remove if no openers or if closing a stream > > opened > > @@ -1868,7 +1873,7 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t > > { > > lgs_ckpt_stream_open_t *param; > > log_stream_t *stream; > > - int pos = 0; > > + int pos = 0, err = 0; > > > > TRACE_ENTER(); > > > > @@ -1898,30 +1903,37 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t > > */ > > stream->numOpeners = param->numOpeners; > > } else { > > - SaNameT name; > > + TRACE("\tNew stream %s, id %u", param->logStreamName, > > param->streamId); > > > > - TRACE("\tNew stream %s, id %u", param->logStreamName, > > param->streamId); > > - strcpy((char *)name.value, param->logStreamName); > > - name.length = strlen(param->logStreamName); > > + SaAisErrorT rc = SA_AIS_OK; > > + stream = log_stream_new(param->logStreamName, param- > > >streamId); > > + if (stream == NULL) { > > + LOG_ER("Failed to create log stream %s", param- > > >logStreamName); > > + goto done; > > > > - stream = log_stream_new_1(&name, > > - param->logFile, > > - param->logPath, > > - param->maxFileSize, > > - param->maxLogRecordSize, > > - param->logFileFullAction, > > - param->maxFilesRotated, > > - param->fileFmt, > > - param->streamType, > > - param->streamId, > > - SA_FALSE, // FIX sync or calculate? > > - param->logRecordId, > > - 0); > > + } > > + err = lgs_populate_log_stream( > > + param->logFile, > > + param->logPath, > > + param->maxFileSize, > > + param->maxLogRecordSize, > > + param->logFileFullAction, > > + param->maxFilesRotated, > > + param->fileFmt, > > + param->streamType, > > + SA_FALSE, // FIX sync or calculate? > > + param->logRecordId, > > + stream // output > > + ); > > > > - if (stream == NULL) { > > - /* Do not allow standby to get out of sync */ > > - LOG_ER("%s - Failed to create stream '%s'", > > __FUNCTION__, > > - param->logStreamName); > > + if (err == -1) { > > + log_stream_delete(&stream); > > + goto done; > > + } > > + > > + rc = lgs_create_rt_appstream(stream); > > + if (rc != SA_AIS_OK) { > > + log_stream_delete(&stream); > > goto done; > > } > > > > @@ -2133,7 +2145,7 @@ static uint32_t ckpt_proc_cfg_stream(lgs > > goto done; > > } > > > > - TRACE("config stream %s, id: %u", stream->name, stream- > > >streamId); > > + TRACE("config stream %s, id: %u", stream->name.c_str(), stream- > > >streamId); > > stream->act_last_close_timestamp = closetime; /* Not used if ver 1 > > */ > > stream->fileName = fileName; > > stream->maxLogFileSize = maxLogFileSize; > > diff --git a/osaf/services/saf/logsv/lgs/lgs_mds.cc > > b/osaf/services/saf/logsv/lgs/lgs_mds.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_mds.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_mds.cc > > @@ -19,6 +19,7 @@ > > > > #include "lgs.h" > > #include "osaf_time.h" > > +#include "osaf_extended_name.h" > > > > #define LGS_SVC_PVT_SUBPART_VERSION 1 > > #define LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT 1 > > @@ -129,6 +130,7 @@ static uint32_t dec_lstr_open_sync_msg(N > > uint32_t rc = NCSCC_RC_SUCCESS; > > lgsv_stream_open_req_t *param = &msg- > > >info.api_info.param.lstr_open_sync; > > uint8_t local_data[256]; > > + char *str_name = NULL; > > > > TRACE_ENTER(); > > // To make it safe when using free() > > @@ -143,17 +145,28 @@ static uint32_t dec_lstr_open_sync_msg(N > > > > /* log stream name length */ > > p8 = ncs_dec_flatten_space(uba, local_data, 2); > > - param->lstr_name.length = ncs_decode_16bit(&p8); > > + size_t length = ncs_decode_16bit(&p8); > > ncs_dec_skip_space(uba, 2); > > > > - if (param->lstr_name.length >= SA_MAX_NAME_LENGTH) { > > + if (length >= kOsafMaxDnLength) { > > TRACE("%s - lstr_name too long",__FUNCTION__); > > rc = NCSCC_RC_FAILURE; > > goto done; > > } > > > > /* log stream name */ > > - ncs_decode_n_octets_from_uba(uba, param->lstr_name.value, > > (uint32_t)param->lstr_name.length); > > + str_name = static_cast<char *> (calloc(1, length + 1)); > > + if (str_name == NULL) { > > + LOG_ER("Fail to allocated memory - str_name"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + ncs_decode_n_octets_from_uba(uba, > > + reinterpret_cast<uint8_t *>(str_name), > > + static_cast<uint32_t>(length)); > > + osaf_extended_name_clear(¶m->lstr_name); > > + /* This allocated memory must be freed in proc_stream_open_msg > > @lgs_evt */ > > + osaf_extended_name_alloc(str_name, ¶m->lstr_name); > > > > /* log file name */ > > p8 = ncs_dec_flatten_space(uba, local_data, 2); > > @@ -238,6 +251,8 @@ done_err: > > free(param->logFileFmt); > > > > done: > > + free(str_name); > > + str_name = NULL; > > TRACE_8("LGSV_STREAM_OPEN_REQ"); > > return rc; > > } > > @@ -271,6 +286,156 @@ static uint32_t dec_lstr_close_msg(NCS_U > > return rc; > > } > > > > +static uint32_t dec_write_ntf_log_header(NCS_UBAID *uba, > > SaLogNtfLogHeaderT *const ntfLogH) > > +{ > > + uint8_t *p8; > > + uint8_t local_data[1024]; > > + size_t notificationL, notifyingL; > > + uint32_t rc = NCSCC_RC_SUCCESS; > > + char *notificationObj = NULL; > > + char *notifyingObj = NULL; > > + > > + ntfLogH->notificationObject = NULL; > > + ntfLogH->notifyingObject = NULL; > > + ntfLogH->notificationClassId = NULL; > > + > > + p8 = ncs_dec_flatten_space(uba, local_data, 14); > > + ntfLogH->notificationId = ncs_decode_64bit(&p8); > > + ntfLogH->eventType = > > static_cast<SaNtfEventTypeT>(ncs_decode_32bit(&p8)); > > + > > + ntfLogH->notificationObject = static_cast<SaNameT > > *>(malloc(sizeof(SaNameT) + 1)); > > + if (ntfLogH->notificationObject == NULL) { > > + LOG_WA("malloc FAILED"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + > > + notificationL = ncs_decode_16bit(&p8); > > + if (kOsafMaxDnLength <= notificationL) { > > + LOG_WA("notificationObject length is so long (max: %d)", > > kOsafMaxDnLength); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + ncs_dec_skip_space(uba, 14); > > + > > + notificationObj = static_cast<char *> (calloc(1, notificationL + 1)); > > + if (notificationObj == NULL) { > > + LOG_WA("Fail to allocated memory - notificationObj"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + ncs_decode_n_octets_from_uba(uba, > > + reinterpret_cast<uint8_t > > *>(notificationObj), > > + static_cast<uint32_t>(notificationL)); > > + osaf_extended_name_clear(ntfLogH->notificationObject); > > + osaf_extended_name_alloc(notificationObj, ntfLogH- > > >notificationObject); > > + > > + ntfLogH->notifyingObject = static_cast<SaNameT > > *>(malloc(sizeof(SaNameT) + 1)); > > + if (ntfLogH->notifyingObject == NULL) { > > + LOG_WA("malloc FAILED"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + > > + p8 = ncs_dec_flatten_space(uba, local_data, 2); > > + notifyingL = ncs_decode_16bit(&p8); > > + ncs_dec_skip_space(uba, 2); > > + > > + if (kOsafMaxDnLength <= notifyingL) { > > + LOG_WA("notifyingObject is so long (max: %d)", > > kOsafMaxDnLength); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + notifyingObj = static_cast<char *> (calloc(1, notifyingL + 1)); > > + if (notifyingObj == NULL) { > > + LOG_WA("Fail to allocated memory - notifyingObj"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + ncs_decode_n_octets_from_uba(uba, > > + reinterpret_cast<uint8_t *>(notifyingObj), > > + static_cast<uint32_t>(notifyingL)); > > + osaf_extended_name_clear(ntfLogH->notifyingObject); > > + osaf_extended_name_alloc(notifyingObj, ntfLogH- > > >notifyingObject); > > + > > + ntfLogH->notificationClassId = static_cast<SaNtfClassIdT > > *>(malloc(sizeof(SaNtfClassIdT))); > > + if (ntfLogH->notificationClassId == NULL) { > > + LOG_WA("malloc FAILED"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + p8 = ncs_dec_flatten_space(uba, local_data, 16); > > + ntfLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8); > > + ntfLogH->notificationClassId->majorId = ncs_decode_16bit(&p8); > > + ntfLogH->notificationClassId->minorId = ncs_decode_16bit(&p8); > > + ntfLogH->eventTime = ncs_decode_64bit(&p8); > > + ncs_dec_skip_space(uba, 16); > > + > > +done: > > + free(notificationObj); > > + free(notifyingObj); > > + TRACE("%s - rc = %d", __func__, rc); > > + return rc; > > +} > > + > > +static uint32_t dec_write_gen_log_header(NCS_UBAID *uba, > > SaLogGenericLogHeaderT *const genLogH) > > +{ > > + uint8_t *p8; > > + uint8_t local_data[1024]; > > + size_t svcLength; > > + uint32_t rc = NCSCC_RC_SUCCESS; > > + char *logSvcUsrName = NULL; > > + > > + genLogH->notificationClassId = NULL; > > + genLogH->logSvcUsrName = NULL; > > + > > + genLogH->notificationClassId = static_cast<SaNtfClassIdT > > *>(malloc(sizeof(SaNtfClassIdT))); > > + if (genLogH->notificationClassId == NULL) { > > + LOG_WA("malloc FAILED"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + > > + p8 = ncs_dec_flatten_space(uba, local_data, 10); > > + genLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8); > > + genLogH->notificationClassId->majorId = ncs_decode_16bit(&p8); > > + genLogH->notificationClassId->minorId = ncs_decode_16bit(&p8); > > + > > + svcLength = ncs_decode_16bit(&p8); > > + if (kOsafMaxDnLength <= svcLength) { > > + LOG_WA("logSvcUsrName too big (max: %d)", > > kOsafMaxDnLength); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + logSvcUsrName = static_cast<char *>(malloc(svcLength + 1)); > > + if (logSvcUsrName == NULL) { > > + LOG_WA("malloc FAILED"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + genLogH->logSvcUsrName = static_cast<SaNameT > > *>(malloc(sizeof(SaNameT) + 1)); > > + if (genLogH->logSvcUsrName == NULL) { > > + LOG_WA("malloc FAILED"); > > + rc = NCSCC_RC_FAILURE; > > + goto done; > > + } > > + ncs_dec_skip_space(uba, 10); > > + ncs_decode_n_octets_from_uba(uba, > > + reinterpret_cast<uint8_t > > *>(logSvcUsrName), > > + static_cast<uint32_t>(svcLength)); > > + osaf_extended_name_clear(const_cast<SaNameT *>(genLogH- > > >logSvcUsrName)); > > + osaf_extended_name_alloc(logSvcUsrName, const_cast<SaNameT > > *>(genLogH->logSvcUsrName)); > > + > > + p8 = ncs_dec_flatten_space(uba, local_data, 2); > > + genLogH->logSeverity = ncs_decode_16bit(&p8); > > + ncs_dec_skip_space(uba, 2); > > + > > +done: > > + free(logSvcUsrName); > > + TRACE("%s - rc = %d", __func__, rc); > > + return rc; > > +} > > + > > > > /********************************************************** > > ****************** > > Name : dec_write_log_async_msg > > > > @@ -294,7 +459,6 @@ static uint32_t dec_write_log_async_msg( > > * Note that more pointers has to be initiated in the allocation > > sequence > > * below. > > */ > > - SaNameT *logSvcUsrName = NULL; > > SaLogNtfLogHeaderT *ntfLogH = NULL; > > SaLogGenericLogHeaderT *genLogH = NULL; > > param->logRecord = NULL; > > @@ -330,109 +494,14 @@ static uint32_t dec_write_log_async_msg( > > switch (param->logRecord->logHdrType) { > > case SA_LOG_NTF_HEADER: > > ntfLogH = ¶m->logRecord->logHeader.ntfHdr; > > - /* Initiate log ntf header pointers */ > > - ntfLogH->notificationObject = NULL; > > - ntfLogH->notifyingObject = NULL; > > - ntfLogH->notificationClassId = NULL; > > - > > - p8 = ncs_dec_flatten_space(uba, local_data, 14); > > - ntfLogH->notificationId = ncs_decode_64bit(&p8); > > - ntfLogH->eventType = > > static_cast<SaNtfEventTypeT>(ncs_decode_32bit(&p8)); > > - > > - ntfLogH->notificationObject = static_cast<SaNameT > > *>(malloc(sizeof(SaNameT) + 1)); > > - if (!ntfLogH->notificationObject) { > > - LOG_WA("malloc FAILED"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - > > - ntfLogH->notificationObject->length = > > ncs_decode_16bit(&p8); > > - if (SA_MAX_NAME_LENGTH <= ntfLogH->notificationObject- > > >length) { > > - TRACE("notificationObject to big"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - ncs_dec_skip_space(uba, 14); > > - > > - ncs_decode_n_octets_from_uba(uba, > > - ntfLogH->notificationObject- > > >value, ntfLogH->notificationObject->length); > > - ntfLogH->notificationObject->value[ntfLogH- > > >notificationObject->length] = '\0'; > > - > > - ntfLogH->notifyingObject = static_cast<SaNameT > > *>(malloc(sizeof(SaNameT) + 1)); > > - if (!ntfLogH->notifyingObject) { > > - LOG_WA("malloc FAILED"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - p8 = ncs_dec_flatten_space(uba, local_data, 2); > > - ntfLogH->notifyingObject->length = ncs_decode_16bit(&p8); > > - ncs_dec_skip_space(uba, 2); > > - > > - if (SA_MAX_NAME_LENGTH <= ntfLogH->notifyingObject- > > >length) { > > - TRACE("notifyingObject to big"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - > > - ncs_decode_n_octets_from_uba(uba, ntfLogH- > > >notifyingObject->value, ntfLogH->notifyingObject->length); > > - ntfLogH->notifyingObject->value[ntfLogH->notifyingObject- > > >length] = '\0'; > > - > > - ntfLogH->notificationClassId = static_cast<SaNtfClassIdT > > *>(malloc(sizeof(SaNtfClassIdT))); > > - if (!ntfLogH->notificationClassId) { > > - LOG_WA("malloc FAILED"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - p8 = ncs_dec_flatten_space(uba, local_data, 16); > > - ntfLogH->notificationClassId->vendorId = > > ncs_decode_32bit(&p8); > > - ntfLogH->notificationClassId->majorId = > > ncs_decode_16bit(&p8); > > - ntfLogH->notificationClassId->minorId = > > ncs_decode_16bit(&p8); > > - ntfLogH->eventTime = ncs_decode_64bit(&p8); > > - ncs_dec_skip_space(uba, 16); > > + rc = dec_write_ntf_log_header(uba, ntfLogH); > > + if (rc != NCSCC_RC_SUCCESS) goto err_done; > > break; > > > > case SA_LOG_GENERIC_HEADER: > > genLogH = ¶m->logRecord->logHeader.genericHdr; > > - /* Initiate general header pointers */ > > - genLogH->notificationClassId = NULL; > > - > > - genLogH->notificationClassId = static_cast<SaNtfClassIdT > > *>(malloc(sizeof(SaNtfClassIdT))); > > - if (!genLogH->notificationClassId) { > > - LOG_WA("malloc FAILED"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - p8 = ncs_dec_flatten_space(uba, local_data, 10); > > - genLogH->notificationClassId->vendorId = > > ncs_decode_32bit(&p8); > > - genLogH->notificationClassId->majorId = > > ncs_decode_16bit(&p8); > > - genLogH->notificationClassId->minorId = > > ncs_decode_16bit(&p8); > > - > > - logSvcUsrName = static_cast<SaNameT > > *>(malloc(sizeof(SaNameT) + 1)); > > - if (!logSvcUsrName) { > > - LOG_WA("malloc FAILED"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - > > - /* > > - ** A const value in genLogHeader is fucking up... > > - ** Extra instance used. > > - */ > > - logSvcUsrName->length = ncs_decode_16bit(&p8); > > - > > - if (SA_MAX_NAME_LENGTH <= logSvcUsrName->length) { > > - LOG_WA("logSvcUsrName too big"); > > - rc = NCSCC_RC_FAILURE; > > - goto err_done; > > - } > > - ncs_dec_skip_space(uba, 10); > > - > > - ncs_decode_n_octets_from_uba(uba, logSvcUsrName- > > >value, logSvcUsrName->length); > > - logSvcUsrName->value[logSvcUsrName->length] = '\0'; > > - genLogH->logSvcUsrName = logSvcUsrName; > > - p8 = ncs_dec_flatten_space(uba, local_data, 2); > > - genLogH->logSeverity = ncs_decode_16bit(&p8); > > - ncs_dec_skip_space(uba, 2); > > + rc = dec_write_gen_log_header(uba, genLogH); > > + if (rc != NCSCC_RC_SUCCESS) goto err_done; > > break; > > > > default: > > @@ -467,7 +536,7 @@ static uint32_t dec_write_log_async_msg( > > param->logRecord->logBuffer- > > >logBuf, > > (uint32_t)param->logRecord- > > >logBuffer->logBufSize); > > } > > - > > + > > /************ end saLogRecord decode ****************/ > > TRACE_8("LGSV_WRITE_LOG_ASYNC_REQ"); > > return rc; > > @@ -483,24 +552,29 @@ static uint32_t dec_write_log_async_msg( > > free(param->logRecord->logBuffer); > > } > > if (ntfLogH != NULL) { /* ¶m->logRecord- > > >logHeader.ntfHdr */ > > - if (ntfLogH->notificationObject != NULL) > > + if (ntfLogH->notificationObject != NULL) { > > + osaf_extended_name_free(ntfLogH- > > >notificationObject); > > free(ntfLogH->notificationObject); > > - if (ntfLogH->notifyingObject != NULL) > > + } > > + if (ntfLogH->notifyingObject != NULL) { > > + osaf_extended_name_free(ntfLogH- > > >notifyingObject); > > free(ntfLogH->notifyingObject); > > + } > > if (ntfLogH->notificationClassId != NULL) > > free(ntfLogH->notificationClassId); > > } > > if (genLogH != NULL) { /* ¶m->logRecord- > > >logHeader.genericHdr */ > > if (genLogH->notificationClassId != NULL) > > free(genLogH->notificationClassId); > > + if (genLogH->logSvcUsrName != NULL) { > > + > > osaf_extended_name_free(const_cast<SaNameT *>(genLogH- > > >logSvcUsrName)); > > + free(const_cast<SaNameT *>(genLogH- > > >logSvcUsrName)); > > + > > + } > > } > > - > > + > > free(param->logRecord); > > } > > - > > - if (logSvcUsrName != NULL) > > - free(logSvcUsrName); > > - > > /************ end saLogRecord decode ****************/ > > TRACE_8("LGSV_WRITE_LOG_ASYNC_REQ (error)"); > > return rc; > > diff --git a/osaf/services/saf/logsv/lgs/lgs_recov.cc > > b/osaf/services/saf/logsv/lgs/lgs_recov.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_recov.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_recov.cc > > @@ -93,7 +93,7 @@ void log_rtobj_list_free() > > * @param dn_str[in] '\0' terminated string containing a dn > > * @return -1 on error > > */ > > -int log_rtobj_list_add(char *dn_str) > > +int log_rtobj_list_add(const std::string &dn_str) > > { > > char *str_ptr = NULL; > > size_t len = 0; > > @@ -116,8 +116,8 @@ int log_rtobj_list_add(char *dn_str) > > } > > > > /* Save dn string */ > > - len = strlen(dn_str) + 1; /* Including '\0' */ > > - if (len > SA_MAX_NAME_LENGTH) { > > + len = dn_str.size() + 1; /* Including '\0' */ > > + if (len > kOsafMaxDnLength) { > > /* Should never happen */ > > LOG_WA("%s\tToo long dn string!",__FUNCTION__); > > rc = -1; > > @@ -131,7 +131,7 @@ int log_rtobj_list_add(char *dn_str) > > goto done; > > } > > > > - strcpy(str_ptr, dn_str); > > + strcpy(str_ptr, dn_str.c_str()); > > > > /* Add dn to list */ > > rtobj_list[rtobj_cnt] = str_ptr; > > @@ -158,12 +158,12 @@ int log_rtobj_list_no() > > * @param dn_str[in] '\0' terminated string with dn to find > > * @return Position of found name or -1 if name not found > > */ > > -int log_rtobj_list_find(char *dn_str) > > +int log_rtobj_list_find(const std::string &dn_str) > > { > > uint32_t i = 0; > > int pos = -1; > > > > - TRACE_ENTER2("dn_str \"%s\"", dn_str); > > + TRACE_ENTER2("dn_str \"%s\"", dn_str.c_str()); > > > > if (rtobj_list == NULL) { > > TRACE("\t No rtobj_list exist"); > > @@ -173,7 +173,7 @@ int log_rtobj_list_find(char *dn_str) > > for (i = 0; i < rtobj_list_len; i++) { > > if (rtobj_list[i] == NULL) > > continue; > > - if (strcmp(rtobj_list[i], dn_str) == 0) { > > + if (strcmp(rtobj_list[i], dn_str.c_str()) == 0) { > > /* Found! */ > > pos = (int) i; > > break; > > @@ -339,7 +339,7 @@ static void lgs_remove_stream(uint32_t c > > * @return -1 on error > > */ > > int lgs_restore_one_app_stream( > > - char *stream_name, uint32_t client_id, > > + const std::string &stream_name, uint32_t client_id, > > log_stream_t **o_stream) > [Lennart] In this function an app stream will be restored by being (re)created. > This stream already has log files so no log files shall be created. Is this > handled correctly since the last in-parameter in the > create_new_app_stream(&open_stream_param, &log_stream, 0) has no > meaning any longer? [Vu] No file is created in `create_new_app_stream` . The function is for creating IMM RT object. So, removing the `creatingFlag` in that function has no impact. > > > { > > int int_rc = 0; > > @@ -365,31 +365,27 @@ int lgs_restore_one_app_stream( > > // Make it safe for free > > par_out.curFileName = NULL; > > > > - TRACE_ENTER2("object_name \"%s\", client_id=%d", stream_name, > > client_id); > > + TRACE_ENTER2("object_name \"%s\", client_id=%d", > > stream_name.c_str(), client_id); > > > > memset(&open_stream_param, 0, sizeof(open_stream_param)); > > > > /* Check and save stream file name */ > > - if (stream_name == NULL) { > > + if (stream_name.empty() == true) { > > TRACE("%s: No object name <NULL>", __FUNCTION__); > > rc_out = -1; > > goto done; > > } > > - n = snprintf(reinterpret_cast<char > > *>(open_stream_param.lstr_name.value), > > - SA_MAX_NAME_LENGTH, "%s", stream_name); > > - > > - open_stream_param.lstr_name.length = strlen(stream_name) + 1; > > - if (n >= SA_MAX_NAME_LENGTH) { > > - TRACE("Log stream name \"%s\" is truncated", > > - open_stream_param.lstr_name.value); > > + if (stream_name.size() >= kOsafMaxDnLength) { > > + TRACE("Log stream name \"%s\" is truncated", > > stream_name.c_str()); > > rc_out = -1; > > goto done; > > } > > + osaf_extended_name_lend(stream_name.c_str(), > > &open_stream_param.lstr_name); > > > > /* Check if in found objects list */ > > list_pos = log_rtobj_list_find(stream_name); > > if (list_pos == -1) { > > - TRACE("%s: No stream \"%s\" found to restore", > > __FUNCTION__, stream_name); > > + TRACE("%s: No stream \"%s\" found to restore", > > __FUNCTION__, stream_name.c_str()); > > rc_out = -1; > > goto done; > > } > > @@ -726,7 +722,7 @@ int log_stream_open_file_restore(log_str > > */ > > if (par_out.curFileName == NULL) { > > /* There is no current log file. Consider as logsv starts from > > scratch */ > > - TRACE("\t Create new cfg/logfile for stream (%s)", stream- > > >name); > > + TRACE("\t Create new cfg/logfile for stream (%s)", stream- > > >name.c_str()); > > log_stream_open_fileinit(stream); > > stream->creationTimeStamp = lgs_get_SaTime(); > > goto done; > > @@ -774,7 +770,7 @@ done: > > * @param stream_name[in] The name of the stream > > * @return -1 on error > > */ > > -int log_close_rtstream_files(char *stream_name) > > +int log_close_rtstream_files(const std::string &stream_name) > > { > > int int_rc = 0; > > int rc_out = 0; > > @@ -793,10 +789,10 @@ int log_close_rtstream_files(char *strea > > // Make it safe for free > > par_out.curFileName = NULL; > > > > - TRACE_ENTER2("object_name \"%s\"", stream_name); > > + TRACE_ENTER2("object_name \"%s\"", stream_name.c_str()); > > > > /* Check and save stream file name */ > > - if (stream_name == NULL) { > > + if (stream_name.empty() == true) { > > TRACE("%s: No object name <NULL>", __FUNCTION__); > > rc_out = -1; > > goto done; > > @@ -878,7 +874,7 @@ int log_close_rtstream_files(char *strea > > current_time, LGS_LOG_FILE_EXT, > > emptyStr); > > if (int_rc == -1) { > > LOG_WA("Failed to rename log file (%s) for stream (%s)", > > - par_out.curFileName, stream_name); > > + par_out.curFileName, stream_name.c_str()); > > } > > > > int_rc = lgs_file_rename_h(rootPath, pathName_bk, fileName, > > @@ -886,7 +882,7 @@ int log_close_rtstream_files(char *strea > > > > if (int_rc == -1) { > > LOG_WA("Failed to rename configuration file (%s) for stream > > (%s)", > > - fileName.c_str(), stream_name); > > + fileName.c_str(), stream_name.c_str()); > > } > > > > done_free_attr: > > diff --git a/osaf/services/saf/logsv/lgs/lgs_recov.h > > b/osaf/services/saf/logsv/lgs/lgs_recov.h > > --- a/osaf/services/saf/logsv/lgs/lgs_recov.h > > +++ b/osaf/services/saf/logsv/lgs/lgs_recov.h > > @@ -20,19 +20,19 @@ > > > > #include "lgs.h" > > > > -int log_rtobj_list_add(char *dn_str); > > +int log_rtobj_list_add(const std::string &dn_str); > > int log_rtobj_list_no(); > > -int log_rtobj_list_find(char *stream_name); > > +int log_rtobj_list_find(const std::string &stream_name); > > int log_rtobj_list_getnamepos(); > > char *log_rtobj_list_getname(int pos); > > void log_rtobj_list_erase_one_pos(int pos); > > void log_rtobj_list_free(); > > int lgs_restore_one_app_stream( > > - char *stream_name, > > + const std::string &stream_name, > > uint32_t client_id, > > log_stream_t **o_stream > > ); > > int log_stream_open_file_restore(log_stream_t *log_stream); > > -int log_close_rtstream_files(char *stream_name); > > +int log_close_rtstream_files(const std::string &stream_name); > > > > #endif /* LGS_STATE_H */ > > diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc > > b/osaf/services/saf/logsv/lgs/lgs_stream.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc > > @@ -31,11 +31,10 @@ > > #include "lgs_file.h" > > #include "lgs_filehdl.h" > > #include "osaf_time.h" > > +#include "immutil.h" > > > > #define DEFAULT_NUM_APP_LOG_STREAMS 64 > > > > -static NCS_PATRICIA_TREE stream_dn_tree; > > - > > static log_stream_t **stream_array; > > /* We have at least the 3 well known streams. */ > > static unsigned int stream_array_size = 3; > > @@ -104,6 +103,17 @@ done: > > } > > > > /** > > + * Get current number of openning streams > > + * > > + * @param: none > > + * @return current number of opening streams > > + */ > > +unsigned int get_number_of_streams() > > +{ > > + return numb_of_streams; > > +} > > + > > +/** > > * Close with retry at EINTR > > * > > * @param fd [in] > > @@ -260,48 +270,6 @@ static int rotate_if_needed(log_stream_t > > return rc; > > } > > > > -static uint32_t log_stream_add(NCS_PATRICIA_NODE *node, const char > > *key) > > -{ > > - uint32_t rc = NCSCC_RC_SUCCESS; > > - > > - node->key_info = (uint8_t *)key; > > - > > - if ( NULL == ncs_patricia_tree_get(&stream_dn_tree,node- > > >key_info)){ > > - rc = ncs_patricia_tree_add(&stream_dn_tree, node); > > - if (rc != NCSCC_RC_SUCCESS) { > > - LOG_WA("ncs_patricia_tree_add FAILED for '%s' > > %u", key, rc); > > - node->key_info = NULL; > > - goto done; > > - } > > - } > > - > > - done: > > - return rc; > > -} > > - > > -static uint32_t log_stream_remove(const char *key) > > -{ > > - uint32_t rc = NCSCC_RC_SUCCESS; > > - log_stream_t *stream; > > - > > - stream = reinterpret_cast<log_stream_t > > *>(ncs_patricia_tree_get(&stream_dn_tree, (uint8_t *)key)); > > - if (stream == NULL) { > > - TRACE_2("ncs_patricia_tree_get FAILED"); > > - rc = NCSCC_RC_FAILURE; > > - goto done; > > - } > > - > > - if (ncs_patricia_tree_get(&stream_dn_tree,stream- > > >pat_node.key_info)){ > > - if ((rc = ncs_patricia_tree_del(&stream_dn_tree, &stream- > > >pat_node)) != NCSCC_RC_SUCCESS) { > > - LOG_WA("ncs_patricia_tree_del FAILED for '%s' > > %u",key,rc); > > - goto done; > > - } > > - } > > - > > - done: > > - return rc; > > -} > > - > > /** > > * Initiate the files belonging to a stream > > * > > @@ -357,35 +325,11 @@ done: > > TRACE_LEAVE(); > > } > > > > -log_stream_t *log_stream_get_by_name(const char *name) > > -{ > > - char nname[SA_MAX_NAME_LENGTH + 1]; > > - > > - /* Create null-terminated stream name */ > > - strcpy(nname, name); > > - memset(&nname[strlen(name)], 0, SA_MAX_NAME_LENGTH + 1 - > > strlen(name)); > > - > > - return reinterpret_cast<log_stream_t > > *>(ncs_patricia_tree_get(&stream_dn_tree, (uint8_t *)nname)); > > -} > > - > > -log_stream_t *log_stream_getnext_by_name(const char *name) > > -{ > > - char nname[SA_MAX_NAME_LENGTH + 1]; > > - > > - if (name != NULL) { > > - /* Create SA_MAX_NAME_LENGTH stream name */ > > - strcpy(nname, name); > > - memset(&nname[strlen(name)], 0, > > SA_MAX_NAME_LENGTH + 1 - strlen(name)); > > - return reinterpret_cast<log_stream_t > > *>(ncs_patricia_tree_getnext(&stream_dn_tree, (uint8_t *)nname)); > > - } else > > - return reinterpret_cast<log_stream_t > > *>(ncs_patricia_tree_getnext(&stream_dn_tree, NULL)); > > -} > > - > > void log_stream_print(log_stream_t *stream) > > { > > osafassert(stream != NULL); > > > > - TRACE_2("******** Stream %s ********", stream->name); > > + TRACE_2("******** Stream %s ********", stream->name.c_str()); > > TRACE_2(" fileName: %s", stream->fileName.c_str()); > > TRACE_2(" pathName: %s", stream->pathName.c_str()); > > TRACE_2(" maxLogFileSize: %llu", stream->maxLogFileSize); > > @@ -418,9 +362,6 @@ void log_free_stream_resources(log_strea > > if (stream->streamId != 0) > > lgs_stream_array_remove(stream->streamId); > > > > - if (stream->pat_node.key_info != NULL) > > - log_stream_remove(stream->name); > > - > > if (stream->logFileFormat != NULL) > > free(stream->logFileFormat); > > > > @@ -442,20 +383,19 @@ void log_stream_delete(log_stream_t **s) > > osafassert(s != NULL && *s != NULL); > > stream = *s; > > > > - TRACE_ENTER2("%s", stream->name); > > + TRACE_ENTER2("%s", stream->name.c_str()); > > > > if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) { > > if (stream->streamType == STREAM_TYPE_APPLICATION) { > > SaAisErrorT rv; > > TRACE("Stream is closed, I am HA active so remove > > IMM object"); > > SaNameT objectName; > > - strcpy((char *)objectName.value, stream->name); > > - objectName.length = strlen((char > > *)objectName.value); > > + osaf_extended_name_lend(stream->name.c_str(), > > &objectName); > > rv = saImmOiRtObjectDelete(lgs_cb->immOiHandle, > > &objectName); > > if (rv != SA_AIS_OK) { > > /* no retry; avoid blocking LOG service #1886 > > */ > > LOG_WA("saImmOiRtObjectDelete returned > > %u for %s", > > - rv, stream->name); > > + rv, stream->name.c_str()); > > } > > } > > } > > @@ -463,9 +403,6 @@ void log_stream_delete(log_stream_t **s) > > if (stream->streamId != 0) > > lgs_stream_array_remove(stream->streamId); > > > > - if (stream->pat_node.key_info != NULL) > > - log_stream_remove(stream->name); > > - > > if (stream->logFileFormat != NULL) > > free(stream->logFileFormat); > > > > @@ -491,33 +428,7 @@ static void init_log_stream_fd(log_strea > > *stream->p_fd = -1; > > } > > > > -/** > > - * Create a new stream object. If HA state active, create the > > - * correspronding IMM runtime object. > > - * > > - * Note: log_stream_new() is replaced by this function. > > - * The new function is doing the same as the old but the possibility > > - * to create a stream without creating a corresponding runtime object > > - * is added. See creationFlag parameter > > - * > > - * Stream attributes[in]: > > - * @param name > > - * @param filename > > - * @param pathname > > - * @param maxLogFileSize > > - * @param fixedLogRecordSize > > - * @param logFullAction > > - * @param maxFilesRotated > > - * @param logFileFormat > > - * @param streamType > > - * @param stream_id > > - * @param twelveHourModeFlag > > - * @param logRecordId > > - * > > - * @return log_stream_t* > > - */ > > -log_stream_t *log_stream_new_1( > > - SaNameT *dn, > > +int lgs_populate_log_stream( > > const std::string &filename, > > const std::string &pathname, > > SaUint64T maxLogFileSize, > > @@ -526,76 +437,51 @@ log_stream_t *log_stream_new_1( > > SaUint32T maxFilesRotated, > > const char *logFileFormat, > > logStreamTypeT streamType, > > - int stream_id, > > SaBoolT twelveHourModeFlag, > > uint32_t logRecordId, > > - int creationFlag > > + log_stream_t *const o_stream > > ) > > { > > - int rc; > > - log_stream_t *stream = NULL; > > + int rc = 0; > > > > - osafassert(dn != NULL); > > - TRACE_ENTER2("%s, l: %u", dn->value, dn->length); > > + o_stream->fileName = filename; > > + o_stream->pathName = pathname; > > + o_stream->maxLogFileSize = maxLogFileSize; > > + o_stream->fixedLogRecordSize = fixedLogRecordSize; > > + o_stream->haProperty = SA_TRUE; > > + o_stream->logFullAction = logFullAction; > > + o_stream->maxFilesRotated = maxFilesRotated; > > + o_stream->creationTimeStamp = lgs_get_SaTime(); > > + o_stream->severityFilter = 0x7f; /* by default all levels are > > allowed */ > > + o_stream->streamType = streamType; > > + o_stream->twelveHourModeFlag = twelveHourModeFlag; > > + o_stream->logRecordId = logRecordId; > > + o_stream->stb_logRecordId = 0; > > > > - if (lgs_relative_path_check_ts(pathname)) { > > - goto done; > > + o_stream->logFileFormat = strdup(logFileFormat); > > + if (o_stream->logFileFormat == NULL) { > > + LOG_WA("Failed to allocate memory for logFileFormat"); > > + rc = -1; > > } > > > > - stream = new (std::nothrow) log_stream_t(); > > - if (stream == NULL) { > > - LOG_WA("log_stream_new calloc FAILED"); > > - goto done; > > - } > > - memcpy(stream->name, dn->value, dn->length); > > - stream->name[SA_MAX_NAME_LENGTH] = '\0'; > > - stream->fileName = filename; > > - stream->pathName = pathname; > > - stream->maxLogFileSize = maxLogFileSize; > > - stream->fixedLogRecordSize = fixedLogRecordSize; > > - stream->haProperty = SA_TRUE; > > - stream->logFullAction = logFullAction; > > - stream->streamId = stream_id; > > - stream->logFileFormat = strdup(logFileFormat); > > - if (stream->logFileFormat == NULL) { > > - log_stream_delete(&stream); > > - goto done; > > - } > > - stream->maxFilesRotated = maxFilesRotated; > > - stream->creationTimeStamp = lgs_get_SaTime(); > > - stream->severityFilter = 0x7f; /* by default all levels are allowed */ > > - stream->streamType = streamType; > > - stream->twelveHourModeFlag = twelveHourModeFlag; > > - stream->logRecordId = logRecordId; > > - stream->stb_logRecordId = 0; > > - > > - /* Initiate local or shared stream file descriptor dependant on shared > > or > > - * split file system > > - */ > > - init_log_stream_fd(stream); > > + return rc; > > +} > > > > - /* Add stream to tree */ > > - if (log_stream_add(&stream->pat_node, stream->name) != > > NCSCC_RC_SUCCESS) { > > - log_stream_delete(&stream); > > - goto done; > > - } > > +/** > > + * Create a new rt app stream object. > > + * > > + * @param rt runtimem app stream > > + * @return SaAisErrorT > > + */ > > +SaAisErrorT lgs_create_rt_appstream(log_stream_t *const rt) > > +{ > > + SaAisErrorT rc = SA_AIS_OK; > > + TRACE_ENTER2("%s, l: %lu", rt->name.c_str(), rt->name.size()); > > > > - /* Add stream to array */ > > - if (stream->streamId == kInvalidId) > > - rc = lgs_stream_array_insert_new(stream, &stream- > > >streamId); > > - else > > - rc = lgs_stream_array_insert(stream, stream->streamId); > > - > > - if (rc < 0) { > > - LOG_WA("Add stream to array FAILED"); > > - log_stream_delete(&stream); > > - goto done; > > - } > > - > > - /* Create IMM runtime object for stream (if ACTIVE) */ > > + /* Create IMM runtime object for rt (if ACTIVE) */ > > if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) { > > - char *dndup = strdup(stream->name); > > - char *parent_name = strchr(stream->name, ','); > > + char *dndup = strdup(rt->name.c_str()); > > + char *parent_name = strchr(const_cast<char *>(rt- > > >name.c_str()), ','); > > char *rdnstr; > > SaNameT parent, *parentName = NULL; > > > > @@ -603,10 +489,9 @@ log_stream_t *log_stream_new_1( > > rdnstr = strtok(dndup, ","); > > parent_name++; /* FIX, vulnerable for > > malformed DNs */ > > parentName = &parent; > > - strcpy((char *)parent.value, parent_name); > > - parent.length = strlen((char *)parent.value); > > + osaf_extended_name_lend(parent_name, > > &parent); > > } else > > - rdnstr = stream->name; > > + rdnstr = const_cast<char *>(rt->name.c_str()); > > > > void *arr1[] = { &rdnstr }; > > const SaImmAttrValuesT_2 attr_safLgStr = { > > @@ -615,7 +500,7 @@ log_stream_t *log_stream_new_1( > > .attrValuesNumber = 1, > > .attrValues = arr1 > > }; > > - char *str2 = const_cast<char *>(stream->fileName.c_str()); > > + char *str2 = const_cast<char *>(rt->fileName.c_str()); > > void *arr2[] = { &str2 }; > > const SaImmAttrValuesT_2 attr_safLogStreamFileName = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamFileName"), > > @@ -623,7 +508,7 @@ log_stream_t *log_stream_new_1( > > .attrValuesNumber = 1, > > .attrValues = arr2 > > }; > > - char *str3 = const_cast<char *>(stream->pathName.c_str()); > > + char *str3 = const_cast<char *>(rt->pathName.c_str()); > > void *arr3[] = { &str3 }; > > const SaImmAttrValuesT_2 attr_safLogStreamPathName = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamPathName"), > > @@ -631,42 +516,42 @@ log_stream_t *log_stream_new_1( > > .attrValuesNumber = 1, > > .attrValues = arr3 > > }; > > - void *arr4[] = { &stream->maxLogFileSize }; > > + void *arr4[] = { &rt->maxLogFileSize }; > > const SaImmAttrValuesT_2 attr_saLogStreamMaxLogFileSize > > = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamMaxLogFileSize"), > > .attrValueType = SA_IMM_ATTR_SAUINT64T, > > .attrValuesNumber = 1, > > .attrValues = arr4 > > }; > > - void *arr5[] = { &stream->fixedLogRecordSize }; > > + void *arr5[] = { &rt->fixedLogRecordSize }; > > const SaImmAttrValuesT_2 > > attr_saLogStreamFixedLogRecordSize = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamFixedLogRecordSize"), > > .attrValueType = SA_IMM_ATTR_SAUINT32T, > > .attrValuesNumber = 1, > > .attrValues = arr5 > > }; > > - void *arr6[] = { &stream->haProperty }; > > + void *arr6[] = { &rt->haProperty }; > > const SaImmAttrValuesT_2 attr_saLogStreamHaProperty = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamHaProperty"), > > .attrValueType = SA_IMM_ATTR_SAUINT32T, > > .attrValuesNumber = 1, > > .attrValues = arr6 > > }; > > - void *arr7[] = { &stream->logFullAction }; > > + void *arr7[] = { &rt->logFullAction }; > > const SaImmAttrValuesT_2 attr_saLogStreamLogFullAction = > > { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamLogFullAction"), > > .attrValueType = SA_IMM_ATTR_SAUINT32T, > > .attrValuesNumber = 1, > > .attrValues = arr7 > > }; > > - void *arr8[] = { &stream->maxFilesRotated }; > > + void *arr8[] = { &rt->maxFilesRotated }; > > const SaImmAttrValuesT_2 > > attr_saLogStreamMaxFilesRotated = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamMaxFilesRotated"), > > .attrValueType = SA_IMM_ATTR_SAUINT32T, > > .attrValuesNumber = 1, > > .attrValues = arr8 > > }; > > - char *str9 = stream->logFileFormat; > > + char *str9 = rt->logFileFormat; > > void *arr9[] = { &str9 }; > > const SaImmAttrValuesT_2 attr_saLogStreamLogFileFormat > = > > { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamLogFileFormat"), > > @@ -674,14 +559,14 @@ log_stream_t *log_stream_new_1( > > .attrValuesNumber = 1, > > .attrValues = arr9 > > }; > > - void *arr10[] = { &stream->severityFilter }; > > + void *arr10[] = { &rt->severityFilter }; > > const SaImmAttrValuesT_2 attr_saLogStreamSeverityFilter = > > { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamSeverityFilter"), > > .attrValueType = SA_IMM_ATTR_SAUINT32T, > > .attrValuesNumber = 1, > > .attrValues = arr10 > > }; > > - void *arr11[] = { &stream->creationTimeStamp }; > > + void *arr11[] = { &rt->creationTimeStamp }; > > const SaImmAttrValuesT_2 > > attr_saLogStreamCreationTimestamp = { > > .attrName = > > const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), > > .attrValueType = SA_IMM_ATTR_SATIMET, > > @@ -703,26 +588,26 @@ log_stream_t *log_stream_new_1( > > NULL > > }; > > > > - /* parentName needs to be configurable? */ > > { > > - SaAisErrorT rv; > > - > > - rv = saImmOiRtObjectCreate_2(lgs_cb- > > >immOiHandle, > > + /** > > + * Have to have retry for Rt creation. > > + * Rt update could consider removing retry to avoid > > blocking > > + */ > > + rc = immutil_saImmOiRtObjectCreate_2(lgs_cb- > > >immOiHandle, > > > > const_cast<SaImmClassNameT>("SaLogStream"), > > parentName, attrValues); > > free(dndup); > > > > - if (rv != SA_AIS_OK) { > > - /* no retry; avoid blocking LOG service #1886 > > */ > > + if (rc != SA_AIS_OK) { > > LOG_WA("saImmOiRtObjectCreate_2 > > returned %u for %s, parent %s", > > - rv, stream->name, parent_name); > > + rc, rt->name.c_str(), parent_name); > > + > > } > > } > > } > > > > - done: > > - TRACE_LEAVE(); > > - return stream; > > + TRACE_LEAVE2("rc: %s", saf_error(rc)); > > + return rc; > > } > > > > /** > > @@ -732,21 +617,19 @@ log_stream_t *log_stream_new_1( > > * > > * @return log_stream_t* > > */ > > -log_stream_t *log_stream_new_2(SaNameT *name, int stream_id) > > +log_stream_t *log_stream_new(const std::string &name, int stream_id) > > { > > - int rc; > > + int rc = 0; > > log_stream_t *stream = NULL; > > > > - osafassert(name != NULL); > > - TRACE_ENTER2("%s, l: %u", name->value, (unsigned int)name- > > >length); > > + TRACE_ENTER2("%s, l: %lu", name.c_str(), name.size()); > > > > stream = new (std::nothrow) log_stream_t(); > > if (stream == NULL) { > > LOG_WA("calloc FAILED"); > > goto done; > > } > > - memcpy(stream->name, name->value, name->length); > > - stream->name[SA_MAX_NAME_LENGTH] = '\0'; > > + stream->name = name; > > stream->streamId = stream_id; > > stream->creationTimeStamp = lgs_get_SaTime(); > > stream->severityFilter = 0x7f; /* by default all levels are allowed */ > > @@ -756,12 +639,6 @@ log_stream_t *log_stream_new_2(SaNameT * > > */ > > init_log_stream_fd(stream); > > > > - /* Add stream to tree */ > > - if (log_stream_add(&stream->pat_node, stream->name) != > > NCSCC_RC_SUCCESS) { > > - log_stream_delete(&stream); > > - goto done; > > - } > > - > > /* Add stream to array */ > > if (stream->streamId == kInvalidId) > > rc = lgs_stream_array_insert_new(stream, &stream- > > >streamId); > > @@ -774,7 +651,7 @@ log_stream_t *log_stream_new_2(SaNameT * > > } > > > > done: > > - TRACE_LEAVE(); > > + TRACE_LEAVE2("rc: %d", rc); > > return stream; > > } > > > > @@ -834,7 +711,7 @@ int log_file_open( > > */ > > void log_stream_open_fileinit(log_stream_t *stream) > > { > > - TRACE_ENTER2("%s, numOpeners=%u", stream->name, stream- > > >numOpeners); > > + TRACE_ENTER2("%s, numOpeners=%u", stream->name.c_str(), > > stream->numOpeners); > > osafassert(stream != NULL); > > > > /* first time open? */ > > @@ -882,7 +759,7 @@ void log_stream_close(log_stream_t **s, > > lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY)); > > > > osafassert(stream != NULL); > > - TRACE_ENTER2("%s", stream->name); > > + TRACE_ENTER2("%s", stream->name.c_str()); > > > > osafassert(stream->numOpeners > 0); > > stream->numOpeners--; > > @@ -979,7 +856,7 @@ int log_stream_file_close(log_stream_t * > > int errno_ret; > > > > osafassert(stream != NULL); > > - TRACE_ENTER2("%s", stream->name); > > + TRACE_ENTER2("%s", stream->name.c_str()); > > > > osafassert(stream->numOpeners > 0); > > > > @@ -1254,7 +1131,7 @@ int log_stream_write_h(log_stream_t *str > > int write_errno=0; > > > > osafassert(stream != NULL && buf != NULL); > > - TRACE_ENTER2("%s", stream->name); > > + TRACE_ENTER2("%s", stream->name.c_str()); > > > > /* Open files on demand e.g. on new active after fail/switch-over. > > This > > * enables LOG to cope with temporary file system problems. */ > > @@ -1266,7 +1143,7 @@ int log_stream_write_h(log_stream_t *str > > > > if (*stream->p_fd == -1) { > > TRACE("%s - Initiating stream files \"%s\" Failed", > > __FUNCTION__, > > - stream->name); > > + stream->name.c_str()); > > } else { > > TRACE("%s - stream files initiated", __FUNCTION__); > > } > > @@ -1371,6 +1248,26 @@ log_stream_t *log_stream_get_by_id(uint3 > > } > > > > /** > > + * Get the stream from database stream_array by its name (dn) > > + * > > + * @param name stream name (dn) > > + * @ret pointer to log_stream_t > > + */ > > +log_stream_t *log_stream_get_by_name(const std::string &name) > > +{ > > + log_stream_t *tmp = NULL; > > + uint32_t i = 0; > > + > > + for (i = 0; i < stream_array_size; i++) { > > + tmp = stream_array[i]; > > + if (tmp != NULL && name == tmp->name) return tmp; > > + } > > + > > + return NULL; > > + > > +} > > + > > +/** > > * Insert stream into array at specified position. > > * @param stream > > * @param id > > @@ -1466,13 +1363,12 @@ void log_stream_id_print() > > TRACE(" Current number of streams: %u", numb_of_streams); > > for (i = 0; i < stream_array_size; i++) { > > if (stream_array[i] != NULL) > > - TRACE(" Id %u - %s", i, stream_array[i]->name); > > + TRACE(" Id %u - %s", i, stream_array[i]- > > >name.c_str()); > > } > > } > > > > uint32_t log_stream_init() > > { > > - NCS_PATRICIA_PARAMS param; > > SaUint32T value; > > > > /* Get configuration of how many application streams we should > > allow. */ > > @@ -1486,11 +1382,7 @@ uint32_t log_stream_init() > > return NCSCC_RC_FAILURE; > > } > > > > - memset(¶m, 0, sizeof(NCS_PATRICIA_PARAMS)); > > - > > - param.key_size = SA_MAX_NAME_LENGTH; > > - > > - return ncs_patricia_tree_init(&stream_dn_tree, ¶m); > > + return NCSCC_RC_SUCCESS; > > } > > > > /** > > @@ -1519,7 +1411,7 @@ int log_stream_config_change(bool create > > char *current_time = lgs_get_time(cur_time_in); > > std::string emptyStr = ""; > > > > - TRACE_ENTER2("%s", stream->name); > > + TRACE_ENTER2("%s", stream->name.c_str()); > > > > /* Peer sync needed due to change in logFileCurrent */ > > > > @@ -1527,7 +1419,7 @@ int log_stream_config_change(bool create > > /* lgs has not yet recieved any stream operation request > > after this swtchover/failover. > > * stream shall be opened on-request after a switchover, > > failover > > */ > > - TRACE("log file of the stream: %s does not exist",stream- > > >name); > > + TRACE("log file of the stream: %s does not exist", stream- > > >name.c_str()); > > } else { > > /* close the existing log file, and only when there is a valid fd > > */ > > > > diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.h > > b/osaf/services/saf/logsv/lgs/lgs_stream.h > > --- a/osaf/services/saf/logsv/lgs/lgs_stream.h > > +++ b/osaf/services/saf/logsv/lgs/lgs_stream.h > > @@ -24,6 +24,7 @@ > > #include <limits.h> > > > > #include "lgs_fmt.h" > > +#include "osaf_extended_name.h" > > > > #define LGS_LOG_FILE_EXT ".log" > > #define LGS_LOG_FILE_CONFIG_EXT ".cfg" > > @@ -34,10 +35,8 @@ > > * attributes like file descriptor. > > */ > > typedef struct log_stream { > > - NCS_PATRICIA_NODE pat_node; > > - > > /* --- Corresponds to IMM Class SaLogStream/SaLogStreamConfig -- > - > > */ > > - char name[SA_MAX_NAME_LENGTH + 1]; /* add for null > > termination */ > > + std::string name; > > std::string fileName; > > std::string pathName; > > SaUint64T maxLogFileSize; > > @@ -82,8 +81,7 @@ extern uint32_t log_stream_init(); > > extern void log_stream_delete(log_stream_t **s); > > > > #define STREAM_NEW -1 > > -extern log_stream_t *log_stream_new_1( > > - SaNameT *name, > > +extern int lgs_populate_log_stream( > > const std::string &filename, > > const std::string &pathname, > > SaUint64T maxLogFileSize, > > @@ -92,13 +90,13 @@ extern log_stream_t *log_stream_new_1( > > SaUint32T maxFilesRotated, > > const char *logFileFormat, > > logStreamTypeT streamType, > > - int stream_id, > > SaBoolT twelveHourModeFlag, > > uint32_t logRecordId, > > - int creationFlag > > + log_stream_t *const o_stream > > ); > > > > -extern log_stream_t *log_stream_new_2(SaNameT *name, int > stream_id); > > +extern SaAisErrorT lgs_create_rt_appstream(log_stream_t *const rt); > > +extern log_stream_t *log_stream_new(const std::string &name, int > > stream_id); > > > > extern void log_stream_open_fileinit(log_stream_t *stream); > > extern void log_initiate_stream_files(log_stream_t *stream); > > @@ -120,11 +118,11 @@ extern int log_file_open(const std::stri > > int *errno_save); > > > > /* Accessor functions */ > > -extern log_stream_t *log_stream_get_by_name(const char *name); > > -extern log_stream_t *log_stream_getnext_by_name(const char *name); > > extern void log_stream_print(log_stream_t *stream); > > extern log_stream_t *log_stream_get_by_id(uint32_t id); > > extern bool check_max_stream(); > > void log_free_stream_resources(log_stream_t *stream); > > +unsigned int get_number_of_streams(); > > +extern log_stream_t *log_stream_get_by_name(const std::string > &name); > > > > #endif > > diff --git a/osaf/services/saf/logsv/lgs/lgs_util.cc > > b/osaf/services/saf/logsv/lgs/lgs_util.cc > > --- a/osaf/services/saf/logsv/lgs/lgs_util.cc > > +++ b/osaf/services/saf/logsv/lgs/lgs_util.cc > > @@ -420,11 +420,14 @@ void lgs_send_write_log_ack(uint32_t cli > > */ > > void lgs_free_write_log(const lgsv_write_log_async_req_t *param) > > { > > + TRACE_ENTER(); > > + > > if (param->logRecord->logHdrType == SA_LOG_GENERIC_HEADER) { > > SaLogGenericLogHeaderT *genLogH = ¶m->logRecord- > > >logHeader.genericHdr; > > free(param->logRecord->logBuffer->logBuf); > > free(param->logRecord->logBuffer); > > free(genLogH->notificationClassId); > > + osaf_extended_name_free(const_cast<SaNameT > > *>(genLogH->logSvcUsrName)); > > free((void *)genLogH->logSvcUsrName); > > free(param->logRecord); > > } else { > > @@ -432,10 +435,14 @@ void lgs_free_write_log(const lgsv_write > > free(param->logRecord->logBuffer->logBuf); > > free(param->logRecord->logBuffer); > > free(ntfLogH->notificationClassId); > > + osaf_extended_name_free(ntfLogH->notifyingObject); > > free(ntfLogH->notifyingObject); > > + osaf_extended_name_free(ntfLogH->notificationObject); > > free(ntfLogH->notificationObject); > > free(param->logRecord); > > } > > + > > + TRACE_LEAVE(); > > } > > > > /** > > @@ -593,7 +600,7 @@ int lgs_own_log_files_h(log_stream_t *st > > std::string dir_path; > > olfbgh_t *data_in = static_cast<olfbgh_t > > *>(malloc(sizeof(olfbgh_t))); > > > > - TRACE_ENTER2("stream %s",stream->name); > > + TRACE_ENTER2("stream %s", stream->name.c_str()); > > > > /* Set in parameter dir_path */ > > const std::string logsv_root_dir = static_cast<const char > > *>(lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY)); > > @@ -834,3 +841,19 @@ bool lgs_is_valid_pathlength(const std:: > > > > return ((rootlen + pathlen + filelen + LOG_TAIL_MAX) < PATH_MAX); > > } > > + > > +/** > > + * Check if the name is valid or not. > > + */ > > +bool lgs_is_extended_name_valid(const SaNameT* name) > > +{ > > + > > + if (name == NULL) return false; > > + if (osaf_is_extended_name_valid(name) == false) return false; > > + > > + SaConstStringT str = osaf_extended_name_borrow(name); > > + if (strlen(str) >= kOsafMaxDnLength) return false; > > + > > + return true; > > + > > +} > > diff --git a/osaf/services/saf/logsv/lgs/lgs_util.h > > b/osaf/services/saf/logsv/lgs/lgs_util.h > > --- a/osaf/services/saf/logsv/lgs/lgs_util.h > > +++ b/osaf/services/saf/logsv/lgs/lgs_util.h > > @@ -81,4 +81,6 @@ bool lgs_is_valid_pathlength(const std:: > > int lgs_init_timer(time_t timeout_s); > > void lgs_close_timer(int ufd); > > > > +bool lgs_is_extended_name_valid(const SaNameT* name); > > + > > #endif /* ifndef __LGS_UTIL_H */ ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel