From: Chengyu Zhu <hudson...@tencent.com>

move parse_oci_ref to oci.c.

Signed-off-by: Chengyu Zhu <hudson...@tencent.com>
---
 lib/liberofs_oci.h |  12 +++--
 lib/remotes/oci.c  | 110 +++++++++++++++++++++++++++++++++++++++++
 mkfs/main.c        | 121 +--------------------------------------------
 3 files changed, 120 insertions(+), 123 deletions(-)

diff --git a/lib/liberofs_oci.h b/lib/liberofs_oci.h
index 3a8108b..bce63ef 100644
--- a/lib/liberofs_oci.h
+++ b/lib/liberofs_oci.h
@@ -8,9 +8,6 @@
 
 #include <stdbool.h>
 
-#define DOCKER_REGISTRY "docker.io"
-#define DOCKER_API_REGISTRY "registry-1.docker.io"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -79,6 +76,15 @@ void ocierofs_cleanup(struct erofs_oci *oci);
  */
 int erofs_oci_params_set_string(char **field, const char *value);
 
+/*
+ * ocierofs_parse_ref - Parse OCI image reference string
+ * @oci: OCI client structure
+ * @ref_str: OCI image reference string
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+int ocierofs_parse_ref(struct erofs_oci *oci, const char *ref_str);
+
 /*
  * ocierofs_build_trees - Build file trees from OCI container image layers
  * @root:     root inode to build the file tree under
diff --git a/lib/remotes/oci.c b/lib/remotes/oci.c
index 0fb8c1f..e6f0c23 100644
--- a/lib/remotes/oci.c
+++ b/lib/remotes/oci.c
@@ -21,6 +21,9 @@
 #include "liberofs_oci.h"
 #include "liberofs_private.h"
 
+#define DOCKER_REGISTRY "docker.io"
+#define DOCKER_API_REGISTRY "registry-1.docker.io"
+
 #define DOCKER_MEDIATYPE_MANIFEST_V2 \
        "application/vnd.docker.distribution.manifest.v2+json"
 #define DOCKER_MEDIATYPE_MANIFEST_V1 \
@@ -1066,3 +1069,110 @@ int erofs_oci_params_set_string(char **field, const 
char *value)
        *field = new_value;
        return 0;
 }
+
+int ocierofs_parse_ref(struct erofs_oci *oci, const char *ref_str)
+{
+       char *slash, *colon, *dot;
+       const char *repo_part;
+       size_t len;
+
+       slash = strchr(ref_str, '/');
+       if (slash) {
+               dot = strchr(ref_str, '.');
+               if (dot && dot < slash) {
+                       char *registry_str;
+
+                       len = slash - ref_str;
+                       registry_str = strndup(ref_str, len);
+
+                       if (!registry_str) {
+                               erofs_err("failed to allocate memory for 
registry");
+                               return -ENOMEM;
+                       }
+                       if (erofs_oci_params_set_string(&oci->params.registry,
+                                                       registry_str)) {
+                               free(registry_str);
+                               erofs_err("failed to set registry");
+                               return -ENOMEM;
+                       }
+                       free(registry_str);
+                       repo_part = slash + 1;
+               } else {
+                       repo_part = ref_str;
+               }
+       } else {
+               repo_part = ref_str;
+       }
+
+       colon = strchr(repo_part, ':');
+       if (colon) {
+               char *repo_str;
+
+               len = colon - repo_part;
+               repo_str = strndup(repo_part, len);
+
+               if (!repo_str) {
+                       erofs_err("failed to allocate memory for repository");
+                       return -ENOMEM;
+               }
+
+               if (!strchr(repo_str, '/') &&
+                   (!strcmp(oci->params.registry, DOCKER_API_REGISTRY) ||
+                    !strcmp(oci->params.registry, DOCKER_REGISTRY))) {
+                       char *full_repo;
+
+                       if (asprintf(&full_repo, "library/%s", repo_str) == -1) 
{
+                               free(repo_str);
+                               erofs_err("failed to allocate memory for full 
repository name");
+                               return -ENOMEM;
+                       }
+                       free(repo_str);
+                       repo_str = full_repo;
+               }
+
+               if (erofs_oci_params_set_string(&oci->params.repository,
+                                               repo_str)) {
+                       free(repo_str);
+                       erofs_err("failed to set repository");
+                       return -ENOMEM;
+               }
+               free(repo_str);
+
+               if (erofs_oci_params_set_string(&oci->params.tag,
+                                               colon + 1)) {
+                       erofs_err("failed to set tag");
+                       return -ENOMEM;
+               }
+       } else {
+               char *repo_str = strdup(repo_part);
+
+               if (!repo_str) {
+                       erofs_err("failed to allocate memory for repository");
+                       return -ENOMEM;
+               }
+
+               if (!strchr(repo_str, '/') &&
+                   (!strcmp(oci->params.registry, DOCKER_API_REGISTRY) ||
+                    !strcmp(oci->params.registry, DOCKER_REGISTRY))) {
+                       char *full_repo;
+
+                       if (asprintf(&full_repo, "library/%s", repo_str) == -1) 
{
+                               free(repo_str);
+                               erofs_err("failed to allocate memory for full 
repository name");
+                               return -ENOMEM;
+                       }
+                       free(repo_str);
+                       repo_str = full_repo;
+               }
+
+               if (erofs_oci_params_set_string(&oci->params.repository,
+                                               repo_str)) {
+                       free(repo_str);
+                       erofs_err("failed to set repository");
+                       return -ENOMEM;
+               }
+               free(repo_str);
+       }
+
+       return 0;
+}
diff --git a/mkfs/main.c b/mkfs/main.c
index bc895f1..064392d 100644
--- a/mkfs/main.c
+++ b/mkfs/main.c
@@ -763,125 +763,6 @@ static int mkfs_parse_oci_options(char *options_str)
 
        return 0;
 }
-
-/**
- * mkfs_parse_oci_ref - Parse OCI image reference string
- * @ref_str: OCI image reference in various formats
- *
- * Parse OCI image reference which can be in formats:
- * - registry.example.com/namespace/repo:tag
- * - namespace/repo:tag (uses default registry)
- * - repo:tag (adds library/ prefix for Docker Hub)
- * - repo (uses default tag "latest")
- *
- * Return: 0 on success, negative errno on failure
- */
-static int mkfs_parse_oci_ref(const char *ref_str)
-{
-       char *slash, *colon, *dot;
-       const char *repo_part;
-       size_t len;
-
-       slash = strchr(ref_str, '/');
-       if (slash) {
-               dot = strchr(ref_str, '.');
-               if (dot && dot < slash) {
-                       char *registry_str;
-
-                       len = slash - ref_str;
-                       registry_str = strndup(ref_str, len);
-
-                       if (!registry_str) {
-                               erofs_err("failed to allocate memory for 
registry");
-                               return -ENOMEM;
-                       }
-                       if (erofs_oci_params_set_string(&ocicfg.params.registry,
-                                                       registry_str)) {
-                               free(registry_str);
-                               erofs_err("failed to set registry");
-                               return -ENOMEM;
-                       }
-                       free(registry_str);
-                       repo_part = slash + 1;
-               } else {
-                       repo_part = ref_str;
-               }
-       } else {
-               repo_part = ref_str;
-       }
-
-       colon = strchr(repo_part, ':');
-       if (colon) {
-               char *repo_str;
-
-               len = colon - repo_part;
-               repo_str = strndup(repo_part, len);
-
-               if (!repo_str) {
-                       erofs_err("failed to allocate memory for repository");
-                       return -ENOMEM;
-               }
-
-               if (!strchr(repo_str, '/') &&
-                   (!strcmp(ocicfg.params.registry, DOCKER_API_REGISTRY) ||
-                    !strcmp(ocicfg.params.registry, DOCKER_REGISTRY))) {
-                       char *full_repo;
-
-                       if (asprintf(&full_repo, "library/%s", repo_str) == -1) 
{
-                               free(repo_str);
-                               erofs_err("failed to allocate memory for full 
repository name");
-                               return -ENOMEM;
-                       }
-                       free(repo_str);
-                       repo_str = full_repo;
-               }
-
-               if (erofs_oci_params_set_string(&ocicfg.params.repository,
-                                               repo_str)) {
-                       free(repo_str);
-                       erofs_err("failed to set repository");
-                       return -ENOMEM;
-               }
-               free(repo_str);
-
-               if (erofs_oci_params_set_string(&ocicfg.params.tag,
-                                               colon + 1)) {
-                       erofs_err("failed to set tag");
-                       return -ENOMEM;
-               }
-       } else {
-               char *repo_str = strdup(repo_part);
-
-               if (!repo_str) {
-                       erofs_err("failed to allocate memory for repository");
-                       return -ENOMEM;
-               }
-
-               if (!strchr(repo_str, '/') &&
-                   (!strcmp(ocicfg.params.registry, DOCKER_API_REGISTRY) ||
-                    !strcmp(ocicfg.params.registry, DOCKER_REGISTRY))) {
-                       char *full_repo;
-
-                       if (asprintf(&full_repo, "library/%s", repo_str) == -1) 
{
-                               free(repo_str);
-                               erofs_err("failed to allocate memory for full 
repository name");
-                               return -ENOMEM;
-                       }
-                       free(repo_str);
-                       repo_str = full_repo;
-               }
-
-               if (erofs_oci_params_set_string(&ocicfg.params.repository,
-                                               repo_str)) {
-                       free(repo_str);
-                       erofs_err("failed to set repository");
-                       return -ENOMEM;
-               }
-               free(repo_str);
-       }
-
-       return 0;
-}
 #endif
 
 static int mkfs_parse_one_compress_alg(char *alg,
@@ -1958,7 +1839,7 @@ int main(int argc, char **argv)
                        err = mkfs_parse_oci_options(mkfs_oci_options);
                        if (err)
                                goto exit;
-                       err = mkfs_parse_oci_ref(cfg.c_src_path);
+                       err = ocierofs_parse_ref(&ocicfg, cfg.c_src_path);
                        if (err)
                                goto exit;
 
-- 
2.51.0


Reply via email to