]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: transfer: Implement storing the transfer in a buffer
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Oct 2023 10:24:31 +0000 (10:24 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Oct 2023 10:24:31 +0000 (10:24 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c
src/libpakfire/include/pakfire/downloader.h

index 2c6464885ee0638afe675ae33000446c72220f71..0c53262d326f252d6a652ba0fbfe4ac0719ccc5e 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <sys/queue.h>
 #include <unistd.h>
@@ -668,6 +669,20 @@ int pakfire_downloader_transfer_set_output(struct pakfire_transfer* transfer, FI
        return 0;
 }
 
+int pakfire_downloader_transfer_set_output_buffer(struct pakfire_transfer* transfer,
+               char** buffer, size_t* length) {
+       FILE* f = NULL;
+
+       // Open a memory stream
+       f = open_memstream(buffer, length);
+       if (!f) {
+               CTX_ERROR(transfer->ctx, "Could not open memory stream: %s\n", strerror(errno));
+               return -errno;
+       }
+
+       return pakfire_downloader_transfer_set_output(transfer, f);
+}
+
 int pakfire_downloader_transfer_set_input(struct pakfire_transfer* transfer, FILE* f) {
        struct stat stat;
        int r;
index 437d57881fdbc309c86a6f9ff708d98b909569a1..f4b9061bdf75dfce5a7c15bb8626b5846ee7185c 100644 (file)
@@ -60,6 +60,8 @@ int pakfire_downloader_transfer_verify_digest(
 int pakfire_downloader_transfer_add_param(struct pakfire_transfer* transfer,
        const char* key, const char* format, ...) __attribute__((format(printf, 3, 4)));
 int pakfire_downloader_transfer_set_output(struct pakfire_transfer* transfer, FILE* f);
+int pakfire_downloader_transfer_set_output_buffer(struct pakfire_transfer* transfer,
+       char** buffer, size_t* length);
 int pakfire_downloader_transfer_set_input(struct pakfire_transfer* transfer, FILE* f);
 int pakfire_downloader_transfer_set_target(struct pakfire_transfer* transfer, const char* path);
 int pakfire_downloader_transfer_auth(struct pakfire_transfer* transfer);