]> git.ipfire.org Git - pakfire.git/commitdiff
compress: Store mode in cookie
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 17 Mar 2021 10:45:39 +0000 (10:45 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 17 Mar 2021 10:45:39 +0000 (10:45 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/compress.c

index 7e37c426bc579bcd3f3f6b1e572e47318b1b1618..0f0bd2ba21f117b0cc4b0ee3e01c1d1d13dd001b 100644 (file)
@@ -115,6 +115,10 @@ static ssize_t xz_read(void* data, char* buffer, size_t size) {
        if (!cookie)
                return -1;
 
+       // Do not read when mode is "w"
+       if (cookie->mode == 'w')
+               return 0;
+
        // Return nothing after we are done
        if (cookie->done)
                return 0;
@@ -178,8 +182,19 @@ static int xz_close(void* data) {
 }
 
 FILE* pakfire_xzfopen(FILE* f, const char* mode) {
+       if (!f) {
+               errno = EBADFD;
+               return NULL;
+       }
+
+       if (!mode) {
+               errno = EINVAL;
+               return NULL;
+       }
+
        struct xz_cookie cookie = {
                .f = f,
+               .mode = *mode,
                .stream = LZMA_STREAM_INIT,
                .done = 0,
        };
@@ -196,5 +211,5 @@ FILE* pakfire_xzfopen(FILE* f, const char* mode) {
                .close = xz_close,
        };
 
-       return fopencookie(&cookie, "rb", functions);
+       return fopencookie(&cookie, mode, functions);
 }