aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmd-version.c16
-rw-r--r--src/version.c48
-rw-r--r--src/version.h4
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 */