diff options
| author | 2024-01-02 21:11:05 -0600 | |
|---|---|---|
| committer | 2024-01-02 21:11:05 -0600 | |
| commit | d0216f9f2ef07c33554e225ede04157afc4947d7 (patch) | |
| tree | 9b5a3f6b5be63c6e2e3567436b3393801ede4ed8 | |
| parent | library downloads complete (diff) | |
make library API better
| -rw-r--r-- | src/cmd-version.c | 16 | ||||
| -rw-r--r-- | src/version.c | 48 | ||||
| -rw-r--r-- | src/version.h | 4 |
3 files changed, 32 insertions, 36 deletions
diff --git a/src/cmd-version.c b/src/cmd-version.c index b1e3fa8..ccee2d0 100644 --- a/src/cmd-version.c +++ b/src/cmd-version.c @@ -34,8 +34,6 @@ unsigned cmd_version_list_local(struct l2_context_node *ctx, char **args) return CMD_RESULT_SUCCESS; } -unsigned l2_version_download_libraries(json_t *jlibraries, l2_version_feature_match_proc_t *feature_matcher); - bool feat_match_cb(const char *name, json_t *js) { L2_UNUSED(name); L2_UNUSED(js); @@ -55,12 +53,18 @@ unsigned cmd_version_install(struct l2_context_node *ctx, char **args) CMD_FATAL("failed to load 1.8.9: %s", l2_version_strerror(res)); } - json_dumpf(js, stdout, JSON_INDENT(4)); - - putchar('\n'); + CMD_INFO0("Retrieving library list..."); + struct l2_version_library *libs = NULL; + if ((res = l2_version_collect_libraries(js, &libs, &feat_match_cb)) != VERSION_SUCCESS) { + CMD_FATAL("Failed to collect library list: %s", l2_version_strerror(res)); + } - printf("%s\n", l2_version_strerror(l2_version_download_libraries(json_object_get(js, "libraries"), &feat_match_cb))); + CMD_INFO0("Downloading libraries..."); + if ((res = l2_version_download_libraries(libs)) != VERSION_SUCCESS) { + CMD_FATAL("Failed to download libraries: %s", l2_version_strerror(res)); + } + l2_version_free_libraries(libs); json_decref(js); return CMD_RESULT_SUCCESS; diff --git a/src/version.c b/src/version.c index a1a5e5c..37ae3ba 100644 --- a/src/version.c +++ b/src/version.c @@ -596,7 +596,7 @@ int l2_version_check_integrity(FILE *fp, l2_sha1_digest_t *digest, size_t sz) } unsigned l2_version__collect_libraries(json_t *jlibs, l2_subst_t *subst, struct l2_version_library **libs, l2_version_feature_match_proc_t *feature_matcher); -void l2_version__free_libraries(struct l2_version_library *libs); +void l2_version_free_libraries(struct l2_version_library *libs); int l2_version__get_library_artifact_path(json_t *lib, l2_subst_t *subst, const char *classifier, char **path); int l2_version__library_should_download(struct l2_version_library *lib); @@ -700,7 +700,7 @@ int l2_version__dlpool_libs_complete(CURL *curl, CURLcode code, void *user) return 0; } -unsigned l2_version__actually_download_libraries(struct l2_version_library *libs) +unsigned l2_version_download_libraries(struct l2_version_library *libs) { unsigned res = VERSION_SUCCESS; struct l2_version__library_dl_data *head = NULL, *tail = NULL; @@ -932,43 +932,31 @@ cleanup: return res; } -unsigned l2_version_download_libraries(json_t *jlibraries, l2_version_feature_match_proc_t *feature_matcher) +unsigned l2_version_collect_libraries(json_t *version, struct l2_version_library **libs, l2_version_feature_match_proc_t *feature_matcher) { - struct l2_version_library *plib = NULL; - unsigned ret = VERSION_EDOWNLOAD; - l2_subst_t *sp = NULL; - - if (l2_subst_init(&sp) < 0) { - ret = VERSION_EALLOC; - goto cleanup; - } + json_t *jlibs; + unsigned res; - if (l2_subst_add(sp, "arch", L2SU_LAUNCHER_ARCH_BITS) < 0) { - ret = VERSION_EALLOC; - goto cleanup; + if (json_unpack(version, "{s:o}", "libraries", &jlibs) < 0) { + return VERSION_EJSON; } - ret = l2_version__collect_libraries(jlibraries, sp, &plib, feature_matcher); - if (ret != VERSION_SUCCESS) goto cleanup; - - ret = l2_version__retrieve_library_integ(plib); - if (ret != VERSION_SUCCESS) { - CMD_WARN0("Failed to retrieve integrity information on libraries for which it was missing!"); + l2_subst_t *subst = NULL; + if (l2_subst_init(&subst) < 0) { + res = VERSION_EALLOC; goto cleanup; } - ret = l2_version__actually_download_libraries(plib); - if (ret != VERSION_SUCCESS) { - CMD_WARN0("Library downloads failed."); + if (l2_subst_add(subst, "arch", L2SU_LAUNCHER_ARCH_BITS) < 0) { + res = VERSION_EALLOC; goto cleanup; } - /* TODO: return libraries */ + res = l2_version__collect_libraries(jlibs, subst, libs, feature_matcher); cleanup: - if (sp) l2_subst_free(sp); - if (plib) l2_version__free_libraries(plib); - return ret; + if (subst) l2_subst_free(subst); + return res; } unsigned l2_version__library_get_classifier(json_t *lib, const char **class) @@ -1129,7 +1117,7 @@ unsigned l2_version__gen_one_library(json_t *lib, l2_subst_t *subst, struct l2_v return VERSION_SUCCESS; cleanup: - l2_version__free_libraries(retlib); + l2_version_free_libraries(retlib); return res; } @@ -1190,11 +1178,11 @@ unsigned l2_version__collect_libraries(json_t *jlibs, l2_subst_t *subst, struct cleanup: /* free libraries */ - l2_version__free_libraries(libraries); + l2_version_free_libraries(libraries); return ret; } -void l2_version__free_libraries(struct l2_version_library *libs) +void l2_version_free_libraries(struct l2_version_library *libs) { if (!libs) return; char **excludecur; diff --git a/src/version.h b/src/version.h index 8ba428f..e59dcb9 100644 --- a/src/version.h +++ b/src/version.h @@ -97,4 +97,8 @@ enum l2_version_check_result { RULE_CHECK_DISALLOW, } l2_version_check_rules(json_t *rules, l2_version_feature_match_proc_t *matcher); +unsigned l2_version_collect_libraries(json_t *version, struct l2_version_library **libs, l2_version_feature_match_proc_t *feature_matcher); +unsigned l2_version_download_libraries(struct l2_version_library *libs); +void l2_version_free_libraries(struct l2_version_library *libs); + #endif /* include guard */ |
