From: Michael Tremer Date: Wed, 17 Mar 2021 10:45:39 +0000 (+0000) Subject: compress: Store mode in cookie X-Git-Tag: 0.9.28~1285^2~519 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48187ff3e3a4738066fd5ce430b6a14501fd41f2;p=pakfire.git compress: Store mode in cookie Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/compress.c b/src/libpakfire/compress.c index 7e37c426b..0f0bd2ba2 100644 --- a/src/libpakfire/compress.c +++ b/src/libpakfire/compress.c @@ -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); }