}
#endif
-static struct pakfire_transfer* pakfire_downloader_create_transfer(
+int pakfire_downloader_add_transfer(
struct pakfire_downloader* downloader, const char* url, const char* path) {
+ DEBUG(downloader->pakfire, "Adding download of %s\n", url);
+
+ // Do not allow relative URLs when no mirrors are set
+ if (!pakfire_url_is_absolute(url) && downloader->num_mirrors == 0) {
+ ERROR(downloader->pakfire, "Relative URLs cannot be used without any mirrors set\n");
+ return EINVAL;
+ }
+
struct pakfire_transfer* transfer = calloc(1, sizeof(*transfer));
if (!transfer)
- return NULL;
+ return ENOMEM;
// Copy URL
snprintf(transfer->url, sizeof(transfer->url) - 1, "%s", url);
curl_easy_setopt(transfer->handle, CURLOPT_WRITEDATA, transfer->f);
- return transfer;
+ // Push this transfer onto the queue
+ TAILQ_INSERT_HEAD(&downloader->transfers, transfer, nodes);
+
+ // Success
+ return 0;
ERROR:
pakfire_transfer_free(transfer);
- return NULL;
+ return 1;
}
static const char* curl_http_version(long v) {
return pakfire_downloader_run(downloader);
}
-int pakfire_downloader_add_transfer(struct pakfire_downloader* downloader,
- const char* url, const char* path) {
- DEBUG(downloader->pakfire, "Adding download of %s\n", url);
-
- // Do not allow relative URLs when no mirrors are set
- if (!pakfire_url_is_absolute(url) && downloader->num_mirrors == 0) {
- ERROR(downloader->pakfire, "Relative URLs cannot be used without any mirrors set\n");
- return EINVAL;
- }
-
- struct pakfire_transfer* transfer =
- pakfire_downloader_create_transfer(downloader, url, path);
- if (!transfer)
- return 1;
-
- // Push this transfer onto the queue
- TAILQ_INSERT_HEAD(&downloader->transfers, transfer, nodes);
-
- return 0;
-}
-
static int pakfire_downloader_activate_transfer(struct pakfire_downloader* downloader,
struct pakfire_transfer* transfer) {
// Simply set absolute URLs