From: Michael Tremer Date: Sat, 11 Jan 2025 13:21:40 +0000 (+0000) Subject: parser: Map the data into buffer to read it faster X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=329d888c023092ac6f32a1fb7c2ec77832ad9db6;p=people%2Fric9%2Fpakfire.git parser: Map the data into buffer to read it faster Signed-off-by: Michael Tremer --- 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; }