From b228251eccc75da1f3fb89f3c4d754d4c9e9d0e5 Mon Sep 17 00:00:00 2001
From: Pompolic <pompolic@special-circumstanc.es>
Date: Mon, 21 Mar 2022 21:29:18 +0100
Subject: [PATCH] (WIP) Start implementing a log message buffer

---
 pdf.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 67 insertions(+)

diff --git a/pdf.c b/pdf.c
index bb5d4fc..07275db 100644
--- a/pdf.c
+++ b/pdf.c
@@ -32,6 +32,73 @@
 #endif
 
 
+/* Works differently from strictness: messages with severity equal to or greater than this number will be printed */
+uint8_t log_level = 0;
+uint64_t log_messages = 0; // XXX: maybe make it static to log_messages
+uint64_t log_capacity = 0; // XXX: this too
+uint8_t logs_failed = 0;
+
+/*
+typedef struct log_message_S {
+	const char *message,
+	uint8_t severity;
+} log_message;
+
+log_message *logs = NULL;
+
+*/
+
+void log_message(const char *message, uint8_t severity)
+{
+	log_message *msg;
+
+	if(logs_failed)
+	{
+		return;
+	}
+	else if(logs == NULL)
+	{
+		logs = calloc(4096, sizeof(log_message));
+	}
+	else if(log_capacity == log_messages)
+	{
+		logs = reallocarray(logs, log_capacity + 4096, sizeof(log_message));
+		log_capacity += 4096
+	}
+
+	/* check logs again in case calloc or realloc failed */
+	if(logs == NULL)
+	{
+		fprintf(stderr, "Failed to allocate log buffer.\n");
+		logs_failed = 1;
+		return;
+	}
+
+	msg = malloc(sizeof(log_message);
+	msg->message = message;
+	msg->severity = severity;
+
+	log_messages += 1;
+}
+
+void print_log_messages()
+{
+	log_message *entry;
+
+	for(int i = 0; i < log_messages; i++)
+	{
+		entry = log_messages[i];
+		if(log_level <= entry->severity)
+		{
+			fprintf(stderr, "%s\n", entry->message);
+		}
+	}
+}
+
+void free_log_messages()
+{
+	//XXX: TODO
+}
 extern int errno;  // used in text extraction
 
 
-- 
GitLab