From bf3bb228f028cc3d990f1dd54d8d03af038fe91d Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Tue, 6 Feb 2024 06:07:09 -0500 Subject: Improve download() * Returns HTTP status code * Emits curl error message to stderr (or to a buffer if the third argument is not NULL) --- src/download.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/download.c b/src/download.c index 6be567e..a64b349 100644 --- a/src/download.c +++ b/src/download.c @@ -2,6 +2,7 @@ // Created by jhunk on 10/5/23. // +#include #include "download.h" size_t download_writer(void *fp, size_t size, size_t nmemb, void *stream) { @@ -9,9 +10,11 @@ size_t download_writer(void *fp, size_t size, size_t nmemb, void *stream) { return bytes; } -int download(char *url, const char *filename) { +long download(char *url, const char *filename, char **errmsg) { extern char *VERSION; CURL *c; + CURLcode curl_code; + long http_code; FILE *fp; char user_agent[20]; sprintf(user_agent, "omc/%s", VERSION); @@ -29,10 +32,18 @@ int download(char *url, const char *filename) { curl_easy_setopt(c, CURLOPT_USERAGENT, user_agent); curl_easy_setopt(c, CURLOPT_NOPROGRESS, 0L); curl_easy_setopt(c, CURLOPT_WRITEDATA, fp); - curl_easy_perform(c); + curl_code = curl_easy_perform(c); + if (curl_code != CURLE_OK) { + if (errmsg) { + strcpy(*errmsg, curl_easy_strerror(curl_code)); + } else { + fprintf(stderr, "CURL ERROR: %s\n", curl_easy_strerror(curl_code)); + } + } + curl_easy_getinfo(c, CURLINFO_RESPONSE_CODE, &http_code); fclose(fp); curl_easy_cleanup(c); curl_global_cleanup(); - return 0; + return http_code; } \ No newline at end of file -- cgit