download.c (1057B)
1/* 2 * Copyright (c) 2018 Virtuozzo International GmbH 3 * 4 * This work is licensed under the terms of the GNU GPL, version 2 or later. 5 * 6 */ 7 8#include "qemu/osdep.h" 9#include <curl/curl.h> 10#include "download.h" 11 12int download_url(const char *name, const char *url) 13{ 14 int err = 0; 15 FILE *file; 16 CURL *curl = curl_easy_init(); 17 18 if (!curl) { 19 return 1; 20 } 21 22 file = fopen(name, "wb"); 23 if (!file) { 24 err = 1; 25 goto out_curl; 26 } 27 28 if (curl_easy_setopt(curl, CURLOPT_URL, url) != CURLE_OK 29 || curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL) != CURLE_OK 30 || curl_easy_setopt(curl, CURLOPT_WRITEDATA, file) != CURLE_OK 31 || curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1) != CURLE_OK 32 || curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0) != CURLE_OK 33 || curl_easy_perform(curl) != CURLE_OK) { 34 unlink(name); 35 fclose(file); 36 err = 1; 37 } else { 38 err = fclose(file); 39 } 40 41out_curl: 42 curl_easy_cleanup(curl); 43 44 return err; 45}