On Mon, Feb 12, 2024 at 05:23:03PM GMT, Emil Velikov via B4 Relay wrote:
From: Emil Velikov <emil.l.veli...@gmail.com>

There is no need to keep the root gzFile context open for the whole
duration. Once we've copied the decompressed module to file->memory we
can close the handle.

Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com>


Reviewed-by: Lucas De Marchi <lucas.demar...@intel.com>

thanks
Lucas De Marchi

---
libkmod/libkmod-file.c | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/libkmod/libkmod-file.c b/libkmod/libkmod-file.c
index b97062b..9a014ea 100644
--- a/libkmod/libkmod-file.c
+++ b/libkmod/libkmod-file.c
@@ -53,9 +53,6 @@ struct kmod_file {
#endif
#ifdef ENABLE_XZ
        bool xz_used;
-#endif
-#ifdef ENABLE_ZLIB
-       gzFile gzf;
#endif
        int fd;
        enum kmod_file_compression_type compression;
@@ -317,6 +314,7 @@ static int load_zlib(struct kmod_file *file)
        int err = 0;
        off_t did = 0, total = 0;
        _cleanup_free_ unsigned char *p = NULL;
+       gzFile gzf;
        int gzfd;

        errno = 0;
@@ -324,8 +322,8 @@ static int load_zlib(struct kmod_file *file)
        if (gzfd < 0)
                return -errno;

-       file->gzf = gzdopen(gzfd, "rb"); /* takes ownership of the fd */
-       if (file->gzf == NULL) {
+       gzf = gzdopen(gzfd, "rb"); /* takes ownership of the fd */
+       if (gzf == NULL) {
                close(gzfd);
                return -errno;
        }
@@ -343,12 +341,12 @@ static int load_zlib(struct kmod_file *file)
                        p = tmp;
                }

-               r = gzread(file->gzf, p + did, total - did);
+               r = gzread(gzf, p + did, total - did);
                if (r == 0)
                        break;
                else if (r < 0) {
                        int gzerr;
-                       const char *gz_errmsg = gzerror(file->gzf, &gzerr);
+                       const char *gz_errmsg = gzerror(gzf, &gzerr);

                        ERR(file->ctx, "gzip: %s\n", gz_errmsg);

@@ -362,19 +360,17 @@ static int load_zlib(struct kmod_file *file)
        file->memory = p;
        file->size = did;
        p = NULL;
+       gzclose(gzf);
        return 0;

error:
-       gzclose(file->gzf); /* closes the gzfd */
+       gzclose(gzf); /* closes the gzfd */
        return err;
}

static void unload_zlib(struct kmod_file *file)
{
-       if (file->gzf == NULL)
-               return;
        free(file->memory);
-       gzclose(file->gzf);
}

static const char magic_zlib[] = {0x1f, 0x8b};

--
2.43.0


Reply via email to