From c0d0866e277b4cf2fa04679d20a1b7476844b672 Mon Sep 17 00:00:00 2001
From: Roberto Moreda <moreda@allenta.com>
Date: Sun, 2 Mar 2025 22:02:25 +0100
Subject: [PATCH 2/3] MINOR: log: detach prepare from parse message

This commit adds a new function `prepare_log_message` to initialize log
message buffers and metadata. This function sets default values for log
level and facility, ensuring a consistent starting state for log
processing. It also prepares the buffer and metadata fields, simplifying
subsequent log parsing and construction.
---
 src/log.c | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/log.c b/src/log.c
index 595691bd3..799270570 100644
--- a/src/log.c
+++ b/src/log.c
@@ -5376,6 +5376,24 @@ void app_log(struct list *loggers, struct buffer *tag, int level, const char *fo
 
 	__send_log(NULL, loggers, tag, level, logline, data_len, default_rfc5424_sd_log_format, 2);
 }
+
+/*
+ * This function sets up the initial state for a log message by preparing
+ * the buffer, setting default values for the log level and facility, and
+ * initializing metadata fields. It is used before parsing or constructing
+ * a log message to ensure all fields are in a known state.
+ */
+void prepare_log_message(char *buf, size_t buflen, int *level, int *facility,
+                         struct ist *metadata, char **message, size_t *size)
+{
+	*level = *facility = -1;
+
+	*message = buf;
+	*size = buflen;
+
+	memset(metadata, 0, LOG_META_FIELDS*sizeof(struct ist));
+}
+
 /*
  * This function parse a received log message <buf>, of size <buflen>
  * it fills <level>, <facility> and <metadata> depending of the detected
@@ -5392,13 +5410,6 @@ void parse_log_message(char *buf, size_t buflen, int *level, int *facility,
 	char *p;
 	int fac_level = 0;
 
-	*level = *facility = -1;
-
-	*message = buf;
-	*size = buflen;
-
-	memset(metadata, 0, LOG_META_FIELDS*sizeof(struct ist));
-
 	p = buf;
 	if (*size < 2 || *p != '<')
 		return;
@@ -5746,6 +5757,8 @@ void syslog_fd_handler(int fd)
 			_HA_ATOMIC_INC(&cum_log_messages);
 			proxy_inc_fe_req_ctr(l, l->bind_conf->frontend, 0);
 
+			prepare_log_message(buf->area, buf->data, &level, &facility, metadata, &message, &size);
+
 			parse_log_message(buf->area, buf->data, &level, &facility, metadata, &message, &size);
 
 			process_send_log(NULL, &l->bind_conf->frontend->loggers, level, facility, metadata, message, size);
@@ -5858,6 +5871,8 @@ static void syslog_io_handler(struct appctx *appctx)
 		_HA_ATOMIC_INC(&cum_log_messages);
 		proxy_inc_fe_req_ctr(l, frontend, 0);
 
+		prepare_log_message(buf->area, buf->data, &level, &facility, metadata, &message, &size);
+
 		parse_log_message(buf->area, buf->data, &level, &facility, metadata, &message, &size);
 
 		process_send_log(NULL, &frontend->loggers, level, facility, metadata, message, size);
-- 
2.42.0

