aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-02-06 06:07:09 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-02-06 06:07:40 -0500
commitbf3bb228f028cc3d990f1dd54d8d03af038fe91d (patch)
tree4d5e63398a19398817b1fbe89b935a39b8a7b40b
parentb6225dc7cadb63161150283e99b902ea8a89dceb (diff)
downloadstasis-bf3bb228f028cc3d990f1dd54d8d03af038fe91d.tar.gz
Improve download()
* Returns HTTP status code * Emits curl error message to stderr (or to a buffer if the third argument is not NULL)
-rw-r--r--include/download.h2
-rw-r--r--src/download.c17
2 files changed, 15 insertions, 4 deletions
diff --git a/include/download.h b/include/download.h
index 41eba98..440c749 100644
--- a/include/download.h
+++ b/include/download.h
@@ -8,6 +8,6 @@
#include <curl/curl.h>
size_t download_writer(void *fp, size_t size, size_t nmemb, void *stream);
-int download(char *url, const char *filename);
+long download(char *url, const char *filename, char **errmsg);
#endif //OMC_DOWNLOAD_H
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 <string.h>
#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