From: Michael Tremer Date: Sun, 26 Jan 2025 16:51:03 +0000 (+0000) Subject: log buffer: Add a function to dump everything X-Git-Tag: 0.9.30~367 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d387d68e1becf7b8c83466b3e0c22afb9f0a0eb;p=pakfire.git log buffer: Add a function to dump everything Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/log_buffer.c b/src/pakfire/log_buffer.c index 0e592f52..4da52eab 100644 --- a/src/pakfire/log_buffer.c +++ b/src/pakfire/log_buffer.c @@ -188,3 +188,43 @@ int pakfire_log_buffer_dequeue(struct pakfire_log_buffer* buffer, int* priority, return 0; } + +int pakfire_log_buffer_dump(struct pakfire_log_buffer* buffer, char** result, size_t* length) { + struct pakfire_log_line* line = NULL; + char* s = NULL; + size_t l = 0; + int r; + + // Check inputs + if (!result || !length) + return -EINVAL; + + // Compute the total length of the buffer that we will need + STAILQ_FOREACH(line, &buffer->lines, nodes) { + l += line->length; + } + + // Nothing to do if the buffer is empty + if (!l) + return 0; + + // Allocate a buffer that can fit the entire content + s = malloc(l); + if (!s) + return -errno; + + char* p = s; + + // Copy the entire content into the buffer + STAILQ_FOREACH(line, &buffer->lines, nodes) { + memcpy(p, line->line, line->length); + + p += line->length; + } + + // Return the buffer + *result = s; + *length = l; + + return 0; +} diff --git a/src/pakfire/log_buffer.h b/src/pakfire/log_buffer.h index 3dc865ea..9727a79a 100644 --- a/src/pakfire/log_buffer.h +++ b/src/pakfire/log_buffer.h @@ -36,4 +36,6 @@ struct pakfire_log_buffer* pakfire_log_buffer_unref(struct pakfire_log_buffer* b int pakfire_log_buffer_enqueue(struct pakfire_log_buffer* buffer, int priority, const char* line, ssize_t length); int pakfire_log_buffer_dequeue(struct pakfire_log_buffer* buffer, int* priority, char** line, size_t* length); +int pakfire_log_buffer_dump(struct pakfire_log_buffer* buffer, char** result, size_t* length); + #endif /* PAKFIRE_LOG_BUFFER_H */