From: Michael Tremer Date: Thu, 19 Oct 2023 10:24:31 +0000 (+0000) Subject: downloader: transfer: Implement storing the transfer in a buffer X-Git-Tag: 0.9.30~1445 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ade3bf93eef711ece54931d204a52f7ac4e4c62;p=people%2Fms%2Fpakfire.git downloader: transfer: Implement storing the transfer in a buffer Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index 2c6464885..0c53262d3 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -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; diff --git a/src/libpakfire/include/pakfire/downloader.h b/src/libpakfire/include/pakfire/downloader.h index 437d57881..f4b9061bd 100644 --- a/src/libpakfire/include/pakfire/downloader.h +++ b/src/libpakfire/include/pakfire/downloader.h @@ -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);