curl_easy_cleanup(transfer->handle);
// Close temporary file
- if (transfer->f) {
- unlink(transfer->tempfile);
+ if (transfer->f)
fclose(transfer->f);
- }
free(transfer);
}
static void pakfire_downloader_free(struct pakfire_downloader* downloader) {
- if (downloader->curl)
- curl_multi_cleanup(downloader->curl);
-
- // Cleanup global stuff after all downloader instances have been freed
- if (!--curl_initialized)
- curl_global_cleanup();
-
// Free any unprocessed transfers
struct pakfire_transfer* transfer;
- TAILQ_FOREACH(transfer, &downloader->transfers, nodes)
- pakfire_transfer_free(transfer);
+ while (!TAILQ_EMPTY(&downloader->transfers)) {
+ transfer = TAILQ_LAST(&downloader->transfers, transfers);
+ TAILQ_REMOVE(&downloader->transfers, transfer, nodes);
+ }
// Free mirrors
if (downloader->mirrors) {
free(downloader->mirrors);
}
+ if (downloader->curl)
+ curl_multi_cleanup(downloader->curl);
+
+ // Cleanup global stuff after all downloader instances have been freed
+ if (!--curl_initialized)
+ curl_global_cleanup();
+
pakfire_unref(downloader->pakfire);
free(downloader);
}
# #
#############################################################################*/
+#include <errno.h>
+
#include <pakfire/downloader.h>
#include "../testsuite.h"
return EXIT_SUCCESS;
}
+static int test_retrieve_with_pending_transfers(const struct test* t) {
+ struct pakfire_downloader* d;
+
+ // Create downloader
+ int r = pakfire_downloader_create(&d, t->pakfire);
+ ASSERT(r == 0);
+
+ // Add a transfer
+ r = pakfire_downloader_add(d, DOWNLOAD_URL, DOWNLOAD_PATH);
+ ASSERT(r == 0);
+
+ // Retrieve a file
+ r = pakfire_downloader_retrieve(d, DOWNLOAD_URL, DOWNLOAD_PATH);
+ ASSERT(r == EBUSY);
+
+ // Cleanup
+ pakfire_downloader_unref(d);
+
+ return EXIT_SUCCESS;
+}
+
int main(int argc, char** argv) {
testsuite_add_test(test_simple);
+ testsuite_add_test(test_retrieve_with_pending_transfers);
return testsuite_run();
}