]> git.ipfire.org Git - pakfire.git/commitdiff
xfer: Make it easier to format URLs
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Oct 2024 13:23:01 +0000 (13:23 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 4 Oct 2024 13:23:01 +0000 (13:23 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/httpclient.c
src/libpakfire/include/pakfire/httpclient.h
src/libpakfire/include/pakfire/xfer.h
src/libpakfire/xfer.c

index 9043b788ab8ac594186790b0509a921349ba2fa2..5c5862c434ad234a117194ff608319396fc86187 100644 (file)
@@ -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;
 
index 43a579724865d9a4470bef5a68af4259ab0d102c..9d2b3a0b8ac9ca746dff749b92dfee5ee13ef451 100644 (file)
@@ -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);
index dfc7eaac981917816a8c2fa57e5aaa17ba4378c3..cefb017c5f961c2111e23bec32e53288edc5529d 100644 (file)
@@ -23,6 +23,8 @@
 
 #ifdef PAKFIRE_PRIVATE
 
+#include <stdarg.h>
+
 #include <curl/curl.h>
 
 #include <json.h>
@@ -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);
index bf892a09c90eb811cc83ee5eac8d451247d332be..5c6e3c11d27a3f01de4fcd47648bb0cea1e1acc9 100644 (file)
@@ -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;