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