cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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}