aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2026-04-23 12:31:24 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2026-04-23 12:31:24 -0400
commite103dde4164bf4cbe13da0ee7aa3483a65ca27f1 (patch)
treee15e01e05512c0a56b64b54aa6e9f25c81b9551c
parent7ad35beeb67a00dda252c57e4a3f3fc04cbb3318 (diff)
downloadstasis-e103dde4164bf4cbe13da0ee7aa3483a65ca27f1.tar.gz
Handle errors in timeout, max_retries, and max_retry_seconds
-rw-r--r--src/lib/core/download.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/lib/core/download.c b/src/lib/core/download.c
index 397f1f6..a979781 100644
--- a/src/lib/core/download.c
+++ b/src/lib/core/download.c
@@ -30,22 +30,26 @@ long download(char *url, const char *filename, char **errmsg) {
}
SYSDEBUG("%s", "Setting max_retries");
- ssize_t max_retries = 5;
+ const size_t max_retries_default = 5;
+ size_t max_retries = max_retries_default;
const char *max_retries_str = getenv("STASIS_DOWNLOAD_RETRY_MAX");
if (max_retries_str) {
- max_retries = strtol(max_retries_str, NULL, 10);
- if (max_retries <= 0) {
- max_retries = 1;
+ max_retries = strtoul(max_retries_str, NULL, 10);
+ if (max_retries == ULONG_MAX && errno == ERANGE) {
+ SYSERROR("STASIS_DOWNLOAD_RETRY_MAX must be a positive integer. Using default (%zu).", max_retries);
+ max_retries = max_retries_default;
}
}
SYSDEBUG("%s", "Setting max_retry_seconds");
- ssize_t max_retry_seconds = 3;
+ const size_t max_retry_seconds_default = 3;
+ size_t max_retry_seconds = max_retry_seconds_default;
const char *max_retry_seconds_str = getenv("STASIS_DOWNLOAD_RETRY_SECONDS");
if (max_retry_seconds_str) {
- max_retry_seconds = strtol(max_retry_seconds_str, NULL, 10);
- if (max_retry_seconds < 0) {
- max_retry_seconds = 0;
+ max_retry_seconds = strtoul(max_retry_seconds_str, NULL, 10);
+ if (max_retry_seconds == ULONG_MAX && errno == ERANGE) {
+ SYSERROR("STASIS_DOWNLOAD_RETRY_SECONDS must be a positive integer. Using default (%zu).", max_retry_seconds);
+ max_retry_seconds = max_retry_seconds_default;
}
}
@@ -53,7 +57,7 @@ long download(char *url, const char *filename, char **errmsg) {
SYSDEBUG("%s", "Initializing curl context");
curl_global_init(CURL_GLOBAL_ALL);
CURL *c = curl_easy_init();
- for (ssize_t retry = 0; retry < max_retries; retry++) {
+ for (size_t retry = 0; retry < max_retries; retry++) {
if (retry) {
fprintf(stderr, "[RETRY %zu/%zu] %s: %s\n", retry + 1, max_retries, *errmsg, url);
}