From 329d888c023092ac6f32a1fb7c2ec77832ad9db6 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 11 Jan 2025 13:21:40 +0000 Subject: [PATCH] parser: Map the data into buffer to read it faster Signed-off-by: Michael Tremer --- src/pakfire/parser.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/pakfire/parser.c b/src/pakfire/parser.c index fe6c88bec..e915ff2b0 100644 --- a/src/pakfire/parser.c +++ b/src/pakfire/parser.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -915,17 +916,31 @@ OUT: int pakfire_parser_read(struct pakfire_parser* parser, FILE* f, struct pakfire_parser_error** error) { - char* data; - size_t len; + char* data = NULL; + size_t length = 0; + int fd = -EBADF; + int r; - int r = pakfire_read_file_into_buffer(f, &data, &len); - if (r) + // Fetch the file descriptor + fd = fileno(f); + if (fd < 0) + return fd; + + // Map the file + r = pakfire_mmap(fd, &data, &length); + if (r < 0) { + ERROR(parser->ctx, "Could not map parser data into memory: %s\n", strerror(-r)); return r; + } - r = pakfire_parser_parse_data(parser, data, len, error); + // Run the parser + r = pakfire_parser_parse_data(parser, data, length, error); + if (r < 0) + goto ERROR; +ERROR: if (data) - free(data); + munmap(data, length); return r; } -- 2.47.3