Pārlūkot izejas kodu

file_out: Switch to str type for string handling

Xenofon Karamanos 1 gadu atpakaļ
vecāks
revīzija
e4163d287e

+ 11 - 5
src/modules/file_out/file_out.c

@@ -199,8 +199,14 @@ static void fo_log_writer_process(int rank)
 			return;
 			return;
 		}
 		}
 
 
-		fprintf(out, "%s\n", log_message.message);
-		fflush(out);
+		if(fprintf(out, "%.*s\n", log_message.message->len,
+				   log_message.message->s)
+				< 0) {
+			LM_ERR("Failed to write to file with err {%s}\n", strerror(errno));
+		}
+		if(fflush(out) < 0) {
+			LM_ERR("Failed to flush file with err {%s}\n", strerror(errno));
+		}
 	}
 	}
 }
 }
 
 
@@ -463,7 +469,7 @@ static int fo_write_to_file(sip_msg_t *msg, char *index, char *log_message)
 		return -1;
 		return -1;
 	}
 	}
 
 
-	str value;
+	str value = str_init("");
 	result = get_str_fparam(&value, msg, (fparam_t *)log_message);
 	result = get_str_fparam(&value, msg, (fparam_t *)log_message);
 	if(result < 0) {
 	if(result < 0) {
 		LM_ERR("Failed to string from param 1: %d\n", result);
 		LM_ERR("Failed to string from param 1: %d\n", result);
@@ -471,8 +477,8 @@ static int fo_write_to_file(sip_msg_t *msg, char *index, char *log_message)
 	}
 	}
 
 
 	/* Add the logging string to the global gueue */
 	/* Add the logging string to the global gueue */
-	fo_log_message_t logMessage;
-	logMessage.message = value.s;
+	fo_log_message_t logMessage = {0, 0};
+	logMessage.message = &value;
 	logMessage.dest_file = file_index;
 	logMessage.dest_file = file_index;
 	fo_enqueue(fo_queue, logMessage);
 	fo_enqueue(fo_queue, logMessage);
 
 

+ 13 - 6
src/modules/file_out/types.c

@@ -22,6 +22,7 @@
 #include <stdlib.h>
 #include <stdlib.h>
 
 
 #include "types.h"
 #include "types.h"
+#include "../../core/ut.h"
 
 
 static fo_node_t *fo_new_node(fo_log_message_t data)
 static fo_node_t *fo_new_node(fo_log_message_t data)
 {
 {
@@ -37,8 +38,18 @@ int fo_enqueue(fo_queue_t *q, fo_log_message_t data)
 	/*
 	/*
 	Copy the contents of data.message
 	Copy the contents of data.message
     */
     */
-	char *message_copy = (char *)shm_malloc(strlen(data.message) + 1);
-	strcpy(message_copy, data.message);
+	str *message_copy = 0;
+	message_copy = (str *)shm_malloc(sizeof(str));
+	if(message_copy == 0) {
+		SHM_MEM_ERROR;
+		return -1;
+	}
+
+	if(shm_str_dup(message_copy, data.message) < 0) {
+		LM_ERR("Failed to duplicate message\n");
+		return -1;
+	}
+
 	data.message = message_copy;
 	data.message = message_copy;
 	fo_node_t *temp = fo_new_node(data);
 	fo_node_t *temp = fo_new_node(data);
 
 
@@ -74,10 +85,6 @@ int fo_dequeue(fo_queue_t *q, fo_log_message_t *data)
 
 
 
 
 	if(temp != NULL) {
 	if(temp != NULL) {
-		if(temp->data.message != NULL) {
-			shm_free(temp->data.message);
-			temp->data.message = NULL;
-		}
 		shm_free(temp);
 		shm_free(temp);
 		temp = NULL;
 		temp = NULL;
 	}
 	}

+ 1 - 1
src/modules/file_out/types.h

@@ -22,7 +22,7 @@
 
 
 typedef struct log_message
 typedef struct log_message
 {
 {
-	char *message;
+	str *message;
 	int dest_file;
 	int dest_file;
 } fo_log_message_t;
 } fo_log_message_t;