[Interdiff v3~v4 4/4] erofs-utils: mkfs: support EROFS index-only image generation from S3

Yifan Zhao zhaoyifan28 at huawei.com
Tue Aug 5 13:05:13 AEST 2025


From: zhaoyifan <zhaoyifan28 at huawei.com>

Interdiff against v3:
diff --git a/lib/remotes/s3.c b/lib/remotes/s3.c
index 5638057..dd682a4 100644
--- a/lib/remotes/s3.c
+++ b/lib/remotes/s3.c
@@ -30,18 +30,17 @@ struct s3erofs_query_params {
 	const char *value[S3EROFS_MAX_QUERY_PARAMS];
 };
 
-static void s3erofs_prepare_url(const char *endpoint, const char *bucket, const char *object,
-				struct s3erofs_query_params *params, char *url,
-				enum s3erofs_url_style url_style)
+static int s3erofs_prepare_url(const char *endpoint, const char *bucket, const char *object,
+			       struct s3erofs_query_params *params, char *url,
+			       enum s3erofs_url_style url_style)
 {
 	const char *schema = NULL;
 	const char *host = NULL;
 	size_t pos = 0;
 	int i;
 
-	if (!endpoint || !bucket || !url) {
-		return;
-	}
+	if (!endpoint || !bucket || !url)
+		return -EINVAL;
 
 	if (strncmp(endpoint, "https://", 8) == 0) {
 		schema = "https://";
@@ -50,8 +49,8 @@ static void s3erofs_prepare_url(const char *endpoint, const char *bucket, const
 		schema = "http://";
 		host = endpoint + 7;
 	} else {
-		schema = "http://";
-		host = endpoint;
+		erofs_err("endpoint has invalid format, missing http/https protocol");
+		return -EINVAL;
 	}
 
 	if (url_style == S3EROFS_URL_STYLE_VIRTUAL_HOST) {
@@ -68,6 +67,8 @@ static void s3erofs_prepare_url(const char *endpoint, const char *bucket, const
 		pos += snprintf(url + pos, S3EROFS_URL_LEN - pos, "%c%s=%s", (i == 0 ? '?' : '&'),
 				params->key[i], params->value[i]);
 	}
+
+	return 0;
 }
 
 static char *get_canonical_headers(const struct curl_slist *list) { return ""; }
@@ -432,8 +433,11 @@ static int s3erofs_list_objects(struct s3erofs_object_iterator *it)
 	++params.num;
 
 	req.method = "GET";
-	s3erofs_prepare_url(s3cfg->endpoint, s3cfg->bucket, NULL, &params,
-			    req.url, s3cfg->url_style);
+	ret = s3erofs_prepare_url(s3cfg->endpoint, s3cfg->bucket, NULL, &params,
+				  req.url, s3cfg->url_style);
+	if (ret < 0)
+		return ret;
+
 	snprintf(req.canonical_query, S3EROFS_CANONICAL_QUERY_LEN, "/%s", s3cfg->bucket);
 
 	ret = s3erofs_request_perform(s3cfg, &req, &resp);
@@ -515,7 +519,6 @@ static int s3erofs_global_init(void)
 	curl_easy_setopt(easy_curl, CURLOPT_WRITEFUNCTION, s3erofs_request_write_memory_cb);
 	curl_easy_setopt(easy_curl, CURLOPT_FOLLOWLOCATION, 1L);
 	curl_easy_setopt(easy_curl, CURLOPT_TIMEOUT, 30L);
-	curl_easy_setopt(easy_curl, CURLOPT_SSL_VERIFYPEER, 0);
 
 	xmlInitParser();
 
-- 
2.46.0



More information about the Linux-erofs mailing list