More functions converted to use threaded file handling.
- create_config_file_hdl

diff --git a/osaf/services/saf/logsv/lgs/lgs_file.c 
b/osaf/services/saf/logsv/lgs/lgs_file.c
--- a/osaf/services/saf/logsv/lgs/lgs_file.c
+++ b/osaf/services/saf/logsv/lgs/lgs_file.c
@@ -128,12 +128,12 @@ static void *file_hndl_thread(void *nopa
        osaf_mutex_lock_ordie(&lgs_ftcom_mutex); /* LOCK */
        while(1) {
                /* Wait for request */
-               TRACE("LLDTEST: %s - Wait for request",__FUNCTION__);
+               //TRACE("LLDTEST: %s - Wait for request",__FUNCTION__);
                if (lgs_com_data.request_f == false) {
                        rc = pthread_cond_wait(&request_cv, &lgs_ftcom_mutex); 
/* -> UNLOCK -> LOCK */
                        if (rc != 0) osaf_abort(rc);
                } else {
-                       TRACE("LLDTEST: %s - Request recived",__FUNCTION__);
+                       //TRACE("LLDTEST: %s - Request recived",__FUNCTION__);
 
                        /* Handle communication buffer */
                        if (lgs_com_data.indata_size != 0) {
@@ -184,6 +184,10 @@ static void *file_hndl_thread(void *nopa
                                TRACE("LLDTEST: %s - LGSF_WRITELOGREC 
received",__FUNCTION__);
                                hndl_rc = write_log_record(inbuf, outbuf, 
max_outsize);
                                break;
+                       case LGSF_CREATECFGFILE:
+                               TRACE("LLDTEST: %s - LGSF_CREATECFGFILE 
received",__FUNCTION__);
+                               hndl_rc = create_config_file_hdl(inbuf, outbuf, 
max_outsize);
+                               break;
                        default:
                                break;
                        }
@@ -192,7 +196,7 @@ static void *file_hndl_thread(void *nopa
                        /* Handle answer flag and return data
                         * Note: This must be done after handler is done 
(handler may hang)
                         */
-                       TRACE("LLDTEST: %s - Handle return data",__FUNCTION__);
+                       //TRACE("LLDTEST: %s - Handle return 
data",__FUNCTION__);
                        lgs_com_data.request_f = false; /* Prepare to take a 
new request */
                        lgs_com_data.request_code = LGSF_NOREQ;
                        free(inbuf);
@@ -209,10 +213,10 @@ static void *file_hndl_thread(void *nopa
                                }
 
                                /* Signal the API function that we are done */
-                               TRACE("LLDTEST: %s - Signal 
answer",__FUNCTION__);
+                               //TRACE("LLDTEST: %s - Signal 
answer",__FUNCTION__);
                                rc = pthread_cond_signal(&answer_cv); 
                                if (rc != 0) osaf_abort(rc);
-                               TRACE("LLDTEST: %s - Answer 
signaled",__FUNCTION__);
+                               //TRACE("LLDTEST: %s - Answer 
signaled",__FUNCTION__);
                        } else {
                                free(outbuf);
                        }
@@ -291,19 +295,15 @@ lgsf_retcode_t log_file_api(lgsf_apipar_
        struct timespec timeout_time, start_time, end_time;
        uint64_t stime_ms, etime_ms, dtime_ms;
        
-       gnolfh_in_t *lldtestpar;
-       
        TRACE_ENTER2("LLDTEST");
        
        osaf_mutex_lock_ordie(&lgs_ftcom_mutex); /* LOCK */
-       TRACE("LLDTEST: lgs_ftcom_mutex is locked");
        
        /* If busy_f is true the file thread is hanging. In this case don't send
         * a request. Make several attempts?
         */
        if (lgs_com_data.request_f == true) {
                api_rc = LGSF_BUSY;
-               TRACE("LLDTEST: Request flag is True");
                goto done;
        }
        
@@ -317,15 +317,6 @@ lgsf_retcode_t log_file_api(lgsf_apipar_
        }
        lgs_com_data.indata_size = apipar_in->data_in_size;
        
-       if (lgs_com_data.request_code == LGSF_GET_NUM_LOGFILES) {
-               lldtestpar = (gnolfh_in_t *) lgs_com_data.indata;
-               TRACE("LLDTEST: From lgs_com_data.indata");
-               TRACE("LLDTEST: apipar_in->data_in_size = 
%ld",apipar_in->data_in_size);
-               TRACE("LLDTEST: lldtestpar->file_name 
\"%s\"",lldtestpar->file_name);
-               TRACE("LLDTEST: lldtestpar->logsv_root_dir 
\"%s\"",lldtestpar->logsv_root_dir);
-               TRACE("LLDTEST: lldtestpar->pathName 
\"%s\"",lldtestpar->pathName);
-       }
-       
        if (apipar_in->data_out_size != 0) {
                lgs_com_data.outdata = malloc(apipar_in->data_out_size);
        } else {
@@ -337,12 +328,12 @@ lgsf_retcode_t log_file_api(lgsf_apipar_
        lgs_com_data.timeout_f = false;
        
        /* Wake up the thread */
-       TRACE("LLDTEST: Wake up thread");
+       //TRACE("LLDTEST: Wake up thread");
        rc = pthread_cond_signal(&request_cv);
        if (rc != 0) osaf_abort(rc);
        
        /* Wait for an answer */
-       TRACE("LLDTEST: Waiting for answer");
+       //TRACE("LLDTEST: Waiting for answer");
        GETTIME(start_time);
        
        get_timeout_time(&timeout_time, MAX_WAITTIME_ms);
@@ -351,12 +342,12 @@ lgsf_retcode_t log_file_api(lgsf_apipar_
                rc = pthread_cond_timedwait(
                                &answer_cv, &lgs_ftcom_mutex, &timeout_time); 
/* -> UNLOCK -> LOCK */
                if (rc == ETIMEDOUT) {
-                       TRACE("LLDTEST: Timed out before answer");
+                       TRACE("Timed out before answer");
                        api_rc = LGSF_TIMEOUT;
                        lgs_com_data.timeout_f = true; /* Inform thread about 
timeout */
                        goto done;
                } else if (rc != 0) {
-                       TRACE("LLDTEST: pthread wait Failed - %s",strerror(rc));
+                       TRACE("pthread wait Failed - %s",strerror(rc));
                        osaf_abort(rc);
                }
        }
@@ -367,10 +358,10 @@ lgsf_retcode_t log_file_api(lgsf_apipar_
         * 'outdata'. It is assumed that the calling function knows the format 
of
         * the returned data.
         */
-       TRACE("LLDTEST: An answer is received");
+       //TRACE("LLDTEST: An answer is received");
        apipar_in->hdl_ret_code_out = lgs_com_data.return_code;
        memcpy(apipar_in->data_out, lgs_com_data.outdata, 
lgs_com_data.outdata_size);
-       TRACE("LLDTEST: Return code for request - %d",lgs_com_data.return_code);
+       //TRACE("LLDTEST: Return code for request - 
%d",lgs_com_data.return_code);
 
        GETTIME(end_time);
        stime_ms = (start_time.tv_sec * 1000) + (start_time.tv_nsec / 1000000);
diff --git a/osaf/services/saf/logsv/lgs/lgs_file.h 
b/osaf/services/saf/logsv/lgs/lgs_file.h
--- a/osaf/services/saf/logsv/lgs/lgs_file.h
+++ b/osaf/services/saf/logsv/lgs/lgs_file.h
@@ -42,6 +42,7 @@ typedef enum {
        LGSF_GET_NUM_LOGFILES,
        LGSF_MAKELOGDIR,
        LGSF_WRITELOGREC,
+       LGSF_CREATECFGFILE,
        LGSF_NOREQ
 }lgsf_treq_t;
 
diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.c 
b/osaf/services/saf/logsv/lgs/lgs_filehdl.c
--- a/osaf/services/saf/logsv/lgs/lgs_filehdl.c
+++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.c
@@ -44,6 +44,7 @@
 #include <ncsgl_defs.h>
 #include <osaf_utility.h>
 
+#include "lgs.h"
 #include "lgs_util.h"
 #include "lgs_file.h"
 
@@ -55,12 +56,80 @@
  *****************************************************************************/
 
 /**
+ * Create a configuration file.
+ * Creates the file, write its content and close the file
+ * 
+ * @param indata[in]
+ * @param outdata[out] Not used
+ * @param max_outsize[in] Must be 0
+ * @return (-1) on error
+ */
+int create_config_file_hdl(void *indata, void *outdata, size_t max_outsize)
+{
+       int rc = 0;
+       FILE *filp;
+       ccfh_t *params_in = (ccfh_t *) indata;
+       char *logFileFormat = (char *) (indata + sizeof(ccfh_t));
+       char *file_path = (logFileFormat + params_in->logFileFormat_size);
+       
+       TRACE_ENTER2("LLDTEST");
+       
+fopen_retry:
+       if ((filp = fopen(file_path, "w")) == NULL) {
+               if (errno == EINTR)
+                       goto fopen_retry;
+
+               LOG_NO("Could not open '%s' - %s", file_path, strerror(errno));
+               rc = -1;
+               goto done;
+       }
+
+       /* version */
+       if ((rc = fprintf(filp, "%s %c.%d.%d\n", LOG_VER_EXP,
+                       params_in->version.releaseCode,
+                       params_in->version.majorVersion,
+                       params_in->version.minorVersion)) == -1)
+               goto fprintf_done;
+
+       /* Format expression */
+       if ((rc = fprintf(filp, "%s%s\n", FMAT_EXP, logFileFormat)) == -1)
+               goto fprintf_done;
+
+       /* Max logfile size */
+       if ((rc = fprintf(filp, "%s %llu\n", CFG_EXP_MAX_FILE_SIZE, 
params_in->maxLogFileSize)) == -1)
+               goto fprintf_done;
+
+       /* Fixed log record size */
+       if ((rc = fprintf(filp, "%s %d\n", CFG_EXP_FIXED_LOG_REC_SIZE, 
params_in->fixedLogRecordSize)) == -1)
+               goto fprintf_done;
+
+       /* Log file full action */
+       rc = fprintf(filp, "%s %s %d\n", CFG_EXP_LOG_FULL_ACTION, 
DEFAULT_ALM_ACTION, params_in->maxFilesRotated);
+
+ fprintf_done:
+       if (rc == -1)
+               LOG_NO("Could not write to '%s'", file_path);
+
+fclose_retry:
+       if ((rc = fclose(filp)) == -1) {
+               if (errno == EINTR)
+                       goto fclose_retry;
+
+               LOG_NO("Could not close '%s' - '%s'", file_path, 
strerror(errno));
+       }
+
+done:
+       TRACE_LEAVE2("LLDTEST: %u", rc);
+       return rc;      
+}
+
+/**
  * Write a log record to file
  * The file must be opened for append
  * 
- * @param indata
- * @param outdata
- * @param max_outsize
+ * @param indata[in]
+ * @param outdata[out] Not used
+ * @param max_outsize[in] Must be 0
  * @return (-1) on error or number of written bytes
  */
 int write_log_record(void *indata, void *outdata, size_t max_outsize)
@@ -72,7 +141,7 @@ int write_log_record(void *indata, void 
         */
        char *logrecord = (char *) (indata + sizeof(wlrh_t));
        
-       TRACE_ENTER2("LLDTEST1");
+       TRACE_ENTER2("LLDTEST");
        
  retry:
        rc = write(params_in->fd, &logrecord[bytes_written],
@@ -91,7 +160,7 @@ int write_log_record(void *indata, void 
        }
  
  done:
-       TRACE_LEAVE2("LLDTEST1: rc=%d",rc);
+       TRACE_LEAVE2("LLDTEST: rc=%d",rc);
        return rc;
 }
 
@@ -123,7 +192,6 @@ int make_log_dir_hdl(void *indata, void 
        struct stat statbuf;
        
        TRACE_ENTER2("LLDTEST");
-       LOG_NO("LLDTEST make_log_dir_hdl >>");
        
        /* Guaranty that both rootpath and relpath is terminated within max 
size */
        rootpath[PATH_MAX] = '\0';
@@ -137,27 +205,27 @@ int make_log_dir_hdl(void *indata, void 
         */
        out_path[0] = '\0';
        if (lstat(rootpath, &statbuf) != 0) {
-#if 0 /* Cannot be handled in logservice for now. Quick fix for #3094 */
+#if 0 /* Cannot be handled in logservice for now. Quick fix for #3094 TBD */
                rootpath = PKGLOGDIR;
                strncpy(out_path, rootpath, max_outsize);
 #endif
-               LOG_NO("LLDTEST: LOG Root path does not exist. Will be 
creeated");
+               LOG_NO("LOG Root path does not exist. Will be created");
        }
        
-       TRACE("LLDTEST: rootpath \"%s\"",rootpath);
-       TRACE("LLDTEST: relpath \"%s\"",relpath);
        /* Create complete path string */
        strcpy(dir_to_make, rootpath);
-       TRACE("LLDTEST: rootpath len=%ld",strlen(rootpath));
-       TRACE("LLDTEST: last char \'%c\'",dir_to_make[strlen(rootpath)-1]);
        if (dir_to_make[strlen(rootpath)-1] != '/') { /* End root path with '/' 
*/
                dir_to_make[strlen(rootpath)] = '/';
                dir_to_make[strlen(rootpath)+1] = '\0';
        }
-       TRACE("LLDTEST: (1) dir_to_make \"%s\"",dir_to_make);
        while (*relpath == '/') relpath++; /* Remove preceding '/' */
        strcat(dir_to_make, relpath); /* Concatenate complete path */
-       TRACE("LLDTEST: (2) dir_to_make \"%s\"",dir_to_make);
+       
+       if (lstat(dir_to_make, &statbuf) == 0) {
+               /* Directory already exists. Creation is not needed */
+               TRACE("LLDTEST: %s Directory already exists",__FUNCTION__);
+               goto done;
+       }
        
        /* Create the path */
        spath_p = epath_p = dir_to_make;
@@ -178,10 +246,9 @@ int make_log_dir_hdl(void *indata, void 
                mldh_rc = -1;
                goto done;
        }
-       TRACE("LLDTEST: Dir \"%s\" created",mpath);
+       TRACE("Dir \"%s\" created",mpath);
        
 done:
-       LOG_NO("LLDTEST make_log_dir_hdl <<");
        TRACE_LEAVE2("LLDTEST: %u", mldh_rc);
        return mldh_rc;
 }
@@ -201,7 +268,6 @@ int fileopen_hdl(void *indata, void *out
        int *errno_out_p = (int *) outdata;
        
        TRACE_ENTER2("LLDTEST");
-       TRACE("LLDTEST: Open filepath \"%s\"",filepath);
        
 open_retry:
        fd_out = open(filepath, O_CREAT | O_RDWR | O_APPEND, S_IRUSR | S_IWUSR 
| S_IRGRP);
@@ -270,8 +336,6 @@ int delete_file_hdl(void *indata, void *
                        LOG_NO("could not unlink: %s - %s", pathname, 
strerror(errno));
        }
 
-       TRACE("LLDTEST: \"%s\" deleted", pathname);
-       
        TRACE_LEAVE2("LLDTEST");
        return rc;
 }
@@ -367,7 +431,6 @@ int get_number_of_log_files_hdl(void *in
        files = n = scandir(path, &namelist, filter_func, alphasort);
        if (n == -1 && errno == ENOENT) {
                rc = 0;
-               TRACE("LLDTEST: %s - 2",__FUNCTION__);
                goto done_exit;
        }
 
diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.h 
b/osaf/services/saf/logsv/lgs/lgs_filehdl.h
--- a/osaf/services/saf/logsv/lgs/lgs_filehdl.h
+++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.h
@@ -12,6 +12,7 @@
 #include <stddef.h>
 #include <saAis.h>
 #include <limits.h>
+#include "lgs_util.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -74,7 +75,6 @@ typedef struct {
         */
 
 /* write_log_record_hdl(..)
- * TBD: Fix handling of logrecord of unknown size!!!
  * No out parameters
  */
 typedef struct {
@@ -87,6 +87,26 @@ typedef struct {
  * Shall be added to the indata buffer directly after the wlrh_t
  */
 
+/* create_config_file_hdl(..)
+ * No out parameters
+ */
+typedef struct {
+       /* Information to write in the config file */
+       SaVersionT version;
+       size_t logFileFormat_size; /* Size of logFileFormat incl. '\0' */
+       SaUint64T maxLogFileSize;
+       SaUint32T fixedLogRecordSize;
+       SaUint32T maxFilesRotated;
+       /* File information */
+       size_t file_path_size; /* Size of file_path incl. '\0' */
+}ccfh_t;
+/* char logFileFormat[]
+ * char file_path[]
+ * Strings of varying length that shall be added
+ * to the indata buffer directly after the ccfh_t
+ */
+
+int create_config_file_hdl(void *indata, void *outdata, size_t max_outsize);
 int write_log_record(void *indata, void *outdata, size_t max_outsize);
 int make_log_dir_hdl(void *indata, void *outdata, size_t max_outsize);
 int fileopen_hdl(void *indata, void *outdata, size_t max_outsize);
diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.c 
b/osaf/services/saf/logsv/lgs/lgs_stream.c
--- a/osaf/services/saf/logsv/lgs/lgs_stream.c
+++ b/osaf/services/saf/logsv/lgs/lgs_stream.c
@@ -72,12 +72,11 @@ static int fileopen_hfop(char *filepath,
        
        api_rc = log_file_api(&apipar);
        if (api_rc != LGSF_SUCESS) {
-               TRACE("LLDTEST: %s - API error %d",__FUNCTION__,api_rc);
+               TRACE("%s - API error %d",__FUNCTION__,api_rc);
                fd = -1;
        } else {
                fd = apipar.hdl_ret_code_out;
        }
-       TRACE("LLDTEST: return %d",fd);
        
        TRACE_LEAVE2("LLDTEST");
        return fd;
@@ -97,8 +96,6 @@ static int fileclose_hfop(int fd)
        
        TRACE_ENTER2("LLDTEST");
        
-       TRACE("LLDTEST fd = %d",fd);
-       
        /* Fill in API structure */
        apipar.req_code_in = LGSF_FILECLOSE;
        apipar.data_in_size = sizeof(int);
@@ -108,7 +105,7 @@ static int fileclose_hfop(int fd)
        
        api_rc = log_file_api(&apipar);
        if (api_rc != LGSF_SUCESS) {
-               TRACE("LLDTEST: %s - API error %d",__FUNCTION__,api_rc);
+               TRACE("%s - API error %d",__FUNCTION__,api_rc);
                rc = -1;
        } else {
                rc = apipar.hdl_ret_code_out;
@@ -143,7 +140,7 @@ static int file_unlink_hfop(char *filepa
        
        api_rc = log_file_api(&apipar);
        if (api_rc != LGSF_SUCESS) {
-               TRACE("LLDTEST: %s - API error 
%s",__FUNCTION__,lgsf_retcode_str(api_rc));
+               TRACE("%s - API error 
%s",__FUNCTION__,lgsf_retcode_str(api_rc));
                rc = -1;
        } else {
                rc = apipar.hdl_ret_code_out;
@@ -807,7 +804,7 @@ static int get_number_of_log_files_hfop(
        
        api_rc = log_file_api(&apipar);
        if (api_rc != LGSF_SUCESS) {
-               TRACE("LLDTEST: %s - API error 
%s",__FUNCTION__,lgsf_retcode_str(api_rc));
+               TRACE("%s - API error 
%s",__FUNCTION__,lgsf_retcode_str(api_rc));
                rc = -1;
        } else {
                rc = apipar.hdl_ret_code_out;
@@ -817,111 +814,6 @@ static int get_number_of_log_files_hfop(
        return rc;
 }
 
-#if 0
-/**
- * log_stream_write will write a number of bytes to the associated file. If
- * the file size gets too big, the file is closed, renamed and a new file is
- * opened. If there are too many files, the oldest file will be deleted.
- * 
- * @param stream
- * @param buf
- * @param count
- * 
- * @return int -1 on error, 0 otherwise
- */
-int log_stream_write_efop(log_stream_t *stream, const char *buf, size_t count)
-{
-       int rc, bytes_written = 0;
-
-       osafassert(stream != NULL && buf != NULL);
-       TRACE_ENTER2("%s", stream->name);
-
-       /* Open files on demand e.g. on new active after fail/switch-over. This
-        * enables LOG to cope with temporary file system problems. */
-       
-       if (stream->fd == -1) {
-               /* Creating directory of given path to store log and cfg files,
-                * if not using shared file system. */
-               if (lgs_make_dir_hfop(stream->pathName) != 0) {
-                       LOG_NO("Create directory '%s/%s' failed", 
lgs_cb->logsv_root_dir, stream->pathName);
-                       rc = -1;
-                       goto done;
-               }
-               /* Creating config file on new ACTIVE */
-               if (lgs_create_config_file_ufop(stream) != 0) {
-                       TRACE("Creating config file failed");
-                       rc = -1;
-                       goto done;
-               }
-               TRACE("stream: %s not opened, opening it now", stream->name);
-               stream->fd = log_file_open_fh(stream, NULL);
-               if (stream->fd == -1) {
-                       rc = -1;
-                       goto done;
-               }
-               TRACE("stream %s now opened", stream->name);
-       }
-
-#if 1 /* LLDTEST: Replace by filehdl function */
- retry:
-       rc = write(stream->fd, &buf[bytes_written], count - bytes_written);
-       if (rc == -1) {
-               if (errno == EINTR)
-                       goto retry;
-
-               LOG_ER("write FAILED: %s", strerror(errno));
-               /* Careful with log level here to avoid syslog flooding */
-               LOG_IN("write '%s' failed - %s", stream->logFileCurrent, 
strerror(errno));
-               goto done;
-       } else {
-               /* Handle partial writes */
-               bytes_written += rc;
-               if (bytes_written < stream->fixedLogRecordSize)
-                       goto retry;
-       }
-#endif
- 
-       rc = 0;
-       stream->curFileSize += count;
-
-       if ((stream->curFileSize + count) > stream->maxLogFileSize) {
-               int errno_save;
-               char *current_time = lgs_get_time();
-
-               if ((rc = fileclose_hfop(stream->fd)) == -1) {
-                       LOG_ER("close FAILED: %s", strerror(errno));
-                       goto done;
-               }
-               stream->fd = -1;
-
-               rc = lgs_file_rename_ufop(stream->pathName, 
stream->logFileCurrent, current_time, LGS_LOG_FILE_EXT);
-               if (rc == -1)
-                       goto done;
-
-               /* Invalidate logFileCurrent for this stream */
-               stream->logFileCurrent[0] = 0;
-
-               /* Remove oldest file if needed */
-               if ((rc = rotate_if_needed_fh(stream)) == -1)
-                       goto done;
-
-               stream->creationTimeStamp = lgs_get_SaTime();
-               sprintf(stream->logFileCurrent, "%s_%s", stream->fileName, 
current_time);
-               if ((stream->fd = log_file_open_fh(stream, &errno_save)) == -1) 
{
-                       LOG_NO("Could not open '%s' - %s", 
stream->logFileCurrent, strerror(errno_save));
-                       rc = -1;
-                       goto done;
-               }
-
-               stream->curFileSize = 0;
-       }
-
- done:
-       TRACE_LEAVE2("rc=%d", rc);
-       return rc;
-}
-#endif
-#if 1
 /**
  * log_stream_write will write a number of bytes to the associated file. If
  * the file size gets too big, the file is closed, renamed and a new file is
@@ -1048,7 +940,6 @@ int log_stream_write_efop(log_stream_t *
        TRACE_LEAVE2("rc=%d", rc);
        return rc;
 }
-#endif
 
 /**
  * Get stream from array
diff --git a/osaf/services/saf/logsv/lgs/lgs_util.c 
b/osaf/services/saf/logsv/lgs/lgs_util.c
--- a/osaf/services/saf/logsv/lgs/lgs_util.c
+++ b/osaf/services/saf/logsv/lgs/lgs_util.c
@@ -33,6 +33,7 @@
  * such functions, add info "Must be thread safe" in header (-ts function)
  */
 
+#include "lgs_util.h"
 #include <stdlib.h>
 #include <inttypes.h>
 #include <sys/stat.h>
@@ -48,12 +49,8 @@
 #define SYSTEM_STREAM_ENV_PREFIX "SYSTEM"
 #define LGS_CREATE_CLOSE_TIME_LEN 16
 #define START_YEAR 1900
-#define LOG_VER_EXP "LOG_SVC_VERSION:"
-#define FMAT_EXP "FORMAT:"
-#define CFG_EXP_MAX_FILE_SIZE "MAX_FILE_SIZE:"
-#define CFG_EXP_FIXED_LOG_REC_SIZE "FIXED_LOG_REC_SIZE:"
-#define CFG_EXP_LOG_FULL_ACTION "LOG_FULL_ACTION:"
 
+#if 0
 /**
  * Create config file according to spec.
  * @param abspath
@@ -136,6 +133,107 @@ done:
        TRACE_LEAVE2("%u", rc);
        return rc;
 }
+#endif
+
+/**
+ * Create config file according to spec.
+ * @param abspath
+ * @param stream
+ * 
+ * @return int
+ */
+int lgs_create_config_file_ufop(log_stream_t *stream)
+{
+       lgsf_apipar_t apipar;
+       lgsf_retcode_t api_rc;
+       void *params_in;
+       ccfh_t *header_in_p;
+       size_t params_in_size;
+       char *logFileFormat_p;
+       char *pathname_p;
+       
+       int rc, n;
+       char pathname[PATH_MAX + NAME_MAX];
+
+       TRACE_ENTER2("LLDTEST");
+
+       /* check the existence of logsv_root_dir/pathName, create the path if 
it doesn't */
+       n = snprintf(pathname, PATH_MAX, "%s/%s", lgs_cb->logsv_root_dir, 
stream->pathName);
+       if (n >= PATH_MAX) {
+               LOG_NO("Directory path too long");
+               rc = -1;
+               goto done;
+       }
+
+       if (lgs_relative_path_check_ts(pathname) == true) {
+               LOG_NO("Directory path not allowed");
+               rc = -1;
+               goto done;
+       }
+       
+       if (lgs_make_dir_hfop(stream->pathName) != 0) {
+               LOG_NO("Create directory '%s/%s' failed", 
lgs_cb->logsv_root_dir, stream->pathName);
+               rc = -1;
+               goto done;
+       }
+
+       /* create absolute path for config file */
+       n = snprintf(&pathname[strlen(pathname)], NAME_MAX, "/%s.cfg", 
stream->fileName);
+
+       if (n >= NAME_MAX) {
+               LOG_ER("Config filename too long");
+               rc = -1;
+               goto done;
+       }
+
+       /* 
+        * Create the configuration file.
+        * Open the file, write it's content and close the file
+        */
+       
+       /* Allocate memory for parameters */
+       params_in_size = sizeof(ccfh_t) + (strlen(stream->logFileFormat) + 1) +
+                       (strlen(pathname) + 1);
+       params_in = malloc(params_in_size);
+       
+       /* Set pointers to allocated memory */
+       header_in_p = params_in;
+       logFileFormat_p = params_in + sizeof(ccfh_t);
+       pathname_p = logFileFormat_p + strlen(stream->logFileFormat) + 1;
+
+       /* Fill in in parameters */
+       header_in_p->version.releaseCode = lgs_cb->log_version.releaseCode;
+       header_in_p->version.majorVersion = lgs_cb->log_version.majorVersion;
+       header_in_p->version.minorVersion = lgs_cb->log_version.minorVersion;
+       header_in_p->logFileFormat_size = strlen(stream->logFileFormat)+1;
+       header_in_p->maxLogFileSize = stream->maxLogFileSize;
+       header_in_p->fixedLogRecordSize = stream->fixedLogRecordSize;
+       header_in_p->maxFilesRotated = stream->maxFilesRotated;
+       
+       strcpy(logFileFormat_p, stream->logFileFormat);
+       strcpy(pathname_p, pathname);
+       
+       /* Fill in API structure */
+       apipar.req_code_in = LGSF_CREATECFGFILE;
+       apipar.data_in_size = params_in_size;
+       apipar.data_in = (void*) params_in;
+       apipar.data_out_size = 0;
+       apipar.data_out = NULL;
+       
+       api_rc = log_file_api(&apipar);
+       if (api_rc != LGSF_SUCESS) {
+               TRACE("%s - API error %d",__FUNCTION__,api_rc);
+               rc = -1;
+       } else {
+               rc = apipar.hdl_ret_code_out;
+       }
+       
+       free(params_in);
+       
+done:
+       TRACE_LEAVE2("LLDTEST: %u", rc);
+       return rc;
+}
 
 /**
  * Get date and time string as mandated by SAF LOG file naming
@@ -362,8 +460,6 @@ int lgs_make_dir_hfop(const char* path)
        
        strncpy(params_in.root_dir, lgs_cb->logsv_root_dir, PATH_MAX+1);
        strncpy(params_in.rel_path, path, PATH_MAX+1);
-       TRACE("LLDTEST: %s - root_dir \"%s\"",__FUNCTION__,params_in.root_dir);
-       TRACE("LLDTEST: %s - rel_path \"%s\"",__FUNCTION__,params_in.rel_path);
        
        /* Fill in API structure */
        apipar.req_code_in = LGSF_MAKELOGDIR;
@@ -374,7 +470,7 @@ int lgs_make_dir_hfop(const char* path)
        
        api_rc = log_file_api(&apipar);
        if (api_rc != LGSF_SUCESS) {
-               TRACE("LLDTEST: %s - API error %d",__FUNCTION__,api_rc);
+               TRACE("%s - API error %d",__FUNCTION__,api_rc);
                rc = -1;
        } else {
                rc = apipar.hdl_ret_code_out;
@@ -383,7 +479,7 @@ int lgs_make_dir_hfop(const char* path)
        /* Handle a possible change of root dir to default */
        if (new_rootstr[0] != '\0') {
                lgs_imm_rootpathconf_set(new_rootstr);
-               TRACE("LLDTEST: %s - new_rootstr 
\"%s\"",__FUNCTION__,new_rootstr);
+               TRACE("%s - new_rootstr \"%s\"",__FUNCTION__,new_rootstr);
        }
 
        TRACE_LEAVE2("LLDTEST");
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
@@ -33,6 +33,11 @@
  *   DEFINITIONS
  * ========================================================================
  */
+#define LOG_VER_EXP "LOG_SVC_VERSION:"
+#define FMAT_EXP "FORMAT:"
+#define CFG_EXP_MAX_FILE_SIZE "MAX_FILE_SIZE:"
+#define CFG_EXP_FIXED_LOG_REC_SIZE "FIXED_LOG_REC_SIZE:"
+#define CFG_EXP_LOG_FULL_ACTION "LOG_FULL_ACTION:"
 
 /* ========================================================================
  *   TYPE DEFINITIONS

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to