From c85c7bf44c51b14705a74b4f110d14058d899d9a Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sat, 15 Oct 2022 20:42:22 +1100 Subject: [PATCH] doing some sanity check --- src/lib66/parse/parse_frontend.c | 33 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/lib66/parse/parse_frontend.c b/src/lib66/parse/parse_frontend.c index d9d30760..780b619d 100644 --- a/src/lib66/parse/parse_frontend.c +++ b/src/lib66/parse/parse_frontend.c @@ -92,7 +92,7 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle { log_flow() ; - int insta, r ; + int insta, r, isparsed ; size_t svlen = strlen(sv) ; char svname[svlen + 1], svsrc[svlen + 1] ; char atree[SS_MAX_TREENAME + 1] ; @@ -135,11 +135,11 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle char file[sa.len + 1] ; auto_strings(file, sa.s) ; - r = service_is_g(atree, svname, STATE_FLAGS_ISPARSED) ; - if (r == -1) - log_dieu(LOG_EXIT_SYS, "check already parsed services") ; + isparsed = service_is_g(atree, svname, STATE_FLAGS_ISPARSED) ; + if (isparsed == -1) + log_dieusys(LOG_EXIT_SYS, "get information of service: ", svname, " -- please a bug report") ; - if (r) { + if (isparsed) { if (!force) { @@ -188,13 +188,12 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle if (!parse_store_main(&res, store, SECTION_MAIN, KEY_MAIN_TYPE)) log_dieu(LOG_EXIT_SYS, "store field type of service: ", svname) ; - stralloc_free(&sa) ; - res.name = resolve_add_string(wres, svname) ; + res.owner = info->owner ; res.ownerstr = resolve_add_string(wres, info->ownerstr) ; - res.path.frontend = resolve_add_string(wres, svsrc) ; + res.path.frontend = resolve_add_string(wres, sv) ; // keep overwrite_conf res.environ.env_overwrite = conf ; @@ -219,7 +218,7 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle if (res.dependencies.ndepends) { size_t len = strlen(res.sa.s + res.dependencies.depends) ; - char t[len + 1] ; + char t[len + strlen(res.sa.s + res.dependencies.optsdeps) + 2] ; auto_strings(t + len, " ", res.sa.s + res.dependencies.optsdeps) ; res.dependencies.depends = resolve_add_string(wres, t) ; @@ -229,23 +228,29 @@ int parse_frontend(char const *sv, resolve_service_t *ares, unsigned int *aresle } } - if (!parse_dependencies(&res, ares, areslen, info, force, conf, forced_directory)) - log_dieu(LOG_EXIT_SYS, "parse dependencies of service: ", svname) ; + /** We take the dependencies in two case: + * If the user ask to it(force > 1) + * If the service was never parsed(!isparsed)*/ + if (force > 1 || !isparsed) + if (!parse_dependencies(&res, ares, areslen, info, force, conf, forced_directory)) + log_dieu(LOG_EXIT_SYS, "parse dependencies of service: ", svname) ; - service_resolve_compute(&res, info) ; + parse_compute_resolve(&res, info) ; if (res.type == TYPE_MODULE) parse_module(&res, ares, areslen, info, force) ; - log_warn("add service: ", svname) ; + log_trace("add service: ", svname) ; if (service_resolve_array_search(ares, *areslen, svname) < 0) { + if (*areslen >= SS_MAX_SERVICE) + log_die(LOG_EXIT_SYS, "to many service to parse -- compile again 66 changing the --max-service options") ; (*residx) = *areslen ; ares[(*areslen)++] = res ; } freed: - + stralloc_free(&sa) ; free(wres) ; return 1 ; } -- GitLab