From: Michael Tremer Date: Fri, 4 Oct 2024 13:23:01 +0000 (+0000) Subject: xfer: Make it easier to format URLs X-Git-Tag: 0.9.30~1180 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=920dd932bd5b4ca42406d2ede07e301d7d092043;p=pakfire.git xfer: Make it easier to format URLs Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/httpclient.c b/src/libpakfire/httpclient.c index 9043b788a..5c5862c43 100644 --- a/src/libpakfire/httpclient.c +++ b/src/libpakfire/httpclient.c @@ -495,12 +495,15 @@ int pakfire_httpclient_set_baseurl(struct pakfire_httpclient* client, const char } int pakfire_httpclient_create_xfer(struct pakfire_xfer** xfer, - struct pakfire_httpclient* client, const char* url) { + struct pakfire_httpclient* client, const char* url, ...) { struct pakfire_xfer* x = NULL; + va_list args; int r; // Create a new transfer - r = pakfire_xfer_create(&x, client->ctx, client, url); + va_start(args, url); + r = __pakfire_xfer_create(&x, client->ctx, client, url, args); + va_end(args); if (r) goto ERROR; diff --git a/src/libpakfire/include/pakfire/httpclient.h b/src/libpakfire/include/pakfire/httpclient.h index 43a579724..9d2b3a0b8 100644 --- a/src/libpakfire/include/pakfire/httpclient.h +++ b/src/libpakfire/include/pakfire/httpclient.h @@ -45,7 +45,7 @@ const char* pakfire_httpclient_get_baseurl(struct pakfire_httpclient* client); int pakfire_httpclient_set_baseurl(struct pakfire_httpclient* client, const char* baseurl); int pakfire_httpclient_create_xfer(struct pakfire_xfer** xfer, - struct pakfire_httpclient* downloader, const char* url); + struct pakfire_httpclient* downloader, const char* url, ...); int pakfire_httpclient_enqueue_xfer( struct pakfire_httpclient* downloader, struct pakfire_xfer* xfer); diff --git a/src/libpakfire/include/pakfire/xfer.h b/src/libpakfire/include/pakfire/xfer.h index dfc7eaac9..cefb017c5 100644 --- a/src/libpakfire/include/pakfire/xfer.h +++ b/src/libpakfire/include/pakfire/xfer.h @@ -23,6 +23,8 @@ #ifdef PAKFIRE_PRIVATE +#include + #include #include @@ -80,7 +82,9 @@ typedef enum pakfire_transfer_method { } pakfire_xfer_method_t; int pakfire_xfer_create(struct pakfire_xfer** transfer, struct pakfire_ctx* ctx, - struct pakfire_httpclient* httpclient, const char* url); + struct pakfire_httpclient* httpclient, const char* url, ...); +int __pakfire_xfer_create(struct pakfire_xfer** xfer, struct pakfire_ctx* ctx, + struct pakfire_httpclient* client, const char* url, va_list args); struct pakfire_xfer* pakfire_xfer_ref(struct pakfire_xfer* xfer); struct pakfire_xfer* pakfire_xfer_unref(struct pakfire_xfer* xfer); diff --git a/src/libpakfire/xfer.c b/src/libpakfire/xfer.c index bf892a09c..5c6e3c11d 100644 --- a/src/libpakfire/xfer.c +++ b/src/libpakfire/xfer.c @@ -330,10 +330,28 @@ ERROR: } int pakfire_xfer_create(struct pakfire_xfer** xfer, struct pakfire_ctx* ctx, - struct pakfire_httpclient* client, const char* url) { + struct pakfire_httpclient* client, const char* url, ...) { + va_list args; + int r; + + va_start(args, url); + r = __pakfire_xfer_create(xfer, ctx, client, url, args); + va_end(args); + + return r; +} + +int __pakfire_xfer_create(struct pakfire_xfer** xfer, struct pakfire_ctx* ctx, + struct pakfire_httpclient* client, const char* url, va_list args) { struct pakfire_xfer* x = NULL; + char buffer[PATH_MAX]; int r; + // Format the URL + r = __pakfire_string_vformat(buffer, sizeof(buffer), url, args); + if (r < 0) + return r; + // Allocate a new xfer x = calloc(1, sizeof(*x)); if (!x) @@ -349,7 +367,7 @@ int pakfire_xfer_create(struct pakfire_xfer** xfer, struct pakfire_ctx* ctx, x->client = pakfire_httpclient_ref(client); // Store the URL - r = pakfire_string_set(x->url, url); + r = pakfire_string_set(x->url, buffer); if (r) goto ERROR;