[PATCH 3/8] lib: fwts_log: re-work log underline

Colin King colin.king at canonical.com
Wed May 16 13:20:20 UTC 2012


From: Colin Ian King <colin.king at canonical.com>

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/lib/src/fwts_log.c |   25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/lib/src/fwts_log.c b/src/lib/src/fwts_log.c
index 8eeeba2..a142f58 100644
--- a/src/lib/src/fwts_log.c
+++ b/src/lib/src/fwts_log.c
@@ -375,26 +375,33 @@ int fwts_log_vprintf(fwts_log *log, const fwts_log_field field, const fwts_log_l
  */
 void fwts_log_underline(fwts_log *log, const int ch)
 {
-	int i;
 	int n;
+	char *buffer;
+	size_t width;
 
-	char buffer[1024];
+	if (!log || (log->magic != LOG_MAGIC))
+		return;
 
 	if (!((LOG_SEPARATOR & LOG_FIELD_MASK) & fwts_log_filter))
 		return;
 
-	/* Get width of log line, based on how wide the heading is */
-	n = fwts_log_header(log, buffer, sizeof(buffer), LOG_SEPARATOR, LOG_LEVEL_NONE);
+	width = log->line_width + 1;
 
-	for (i=n;i<log->line_width-1;i++)
-		buffer[i] = ch;
+	buffer = calloc(1, width);
+	if (!buffer)
+		return;	/* Unlikely, and just abort */
 
-	buffer[i++] = '\n';
-	buffer[i] = '\0';
+	/* Write in leading optional line prefix */
+	n = fwts_log_header(log, buffer, width, LOG_SEPARATOR, LOG_LEVEL_NONE);
 
-	fwrite(buffer, 1, log->line_width, log->fp);
+	memset(buffer + n, ch, width  - n);
+	buffer[width - 1] = '\n';
+
+	fwrite(buffer, 1, width, log->fp);
 	fflush(log->fp);
 	log->line_number++;
+
+	free(buffer);
 }
 
 /*
-- 
1.7.10





More information about the fwts-devel mailing list