From 530dd70acc32f18febbcb703c95e0553bcdc1943 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sat, 15 Oct 2022 23:28:02 +1100 Subject: [PATCH] use new function and resolve format --- src/lib66/exec/deps-lib/deps | 3 +- src/lib66/exec/ssexec_free.c | 1 - src/lib66/exec/ssexec_parse.c | 54 ++++++--- src/lib66/exec/ssexec_tree.c | 204 ++++++++++------------------------ 4 files changed, 100 insertions(+), 162 deletions(-) diff --git a/src/lib66/exec/deps-lib/deps b/src/lib66/exec/deps-lib/deps index 6a4c7f45..ca1bded6 100644 --- a/src/lib66/exec/deps-lib/deps +++ b/src/lib66/exec/deps-lib/deps @@ -1,5 +1,4 @@ ssexec_all.o -ssexec_dbctl.o ssexec_disable.o ssexec_enable.o ssexec_env.o @@ -7,11 +6,11 @@ ssexec_free.o ssexec_help.o ssexec_init.o ssexec_main.o +ssexec_parse.o ssexec_start.o ssexec_stop.o ssexec_svctl.o ssexec_tree.o --ls6rc -ls6 -loblibs -lskarnet diff --git a/src/lib66/exec/ssexec_free.c b/src/lib66/exec/ssexec_free.c index b2afe669..9091563c 100644 --- a/src/lib66/exec/ssexec_free.c +++ b/src/lib66/exec/ssexec_free.c @@ -29,7 +29,6 @@ void ssexec_free(ssexec_t *info) stralloc_free(&info->base) ; stralloc_free(&info->live) ; stralloc_free(&info->tree) ; - stralloc_free(&info->livetree) ; stralloc_free(&info->scandir) ; stralloc_free(&info->treename) ; } diff --git a/src/lib66/exec/ssexec_parse.c b/src/lib66/exec/ssexec_parse.c index 2e00ecb6..95e01768 100644 --- a/src/lib66/exec/ssexec_parse.c +++ b/src/lib66/exec/ssexec_parse.c @@ -21,10 +21,12 @@ #include <oblibs/types.h> #include <oblibs/directory.h> #include <oblibs/obgetopt.h> +#include <oblibs/sastr.h> #include <66/parser.h> #include <66/ssexec.h> - +#include <66/utils.h> +/* static void check_dir(char const *dir, uint8_t force, int main) { log_flow() ; @@ -50,13 +52,13 @@ static void check_dir(char const *dir, uint8_t force, int main) if (!dir_create_parent(dir, 0755)) log_dieusys(LOG_EXIT_SYS,"create: ",dir) ; } - +*/ int ssexec_parse(int argc, char const *const *argv, ssexec_t *info) { - char const *dir ; - char const *sv ; + log_flow() ; uint8_t force = 0 , conf = 0 ; + stralloc sa = STRALLOC_ZERO ; { subgetopt l = SUBGETOPT_ZERO ; @@ -96,25 +98,45 @@ int ssexec_parse(int argc, char const *const *argv, ssexec_t *info) argc -= l.ind ; argv += l.ind ; } - if (argc < 2) log_usage(usage_parse) ; + if (argc < 1) + log_usage(usage_parse) ; - sv = argv[0] ; - dir = argv[1] ; + for (; *argv ; argv++) { - if (dir[0] != '/') - log_die(LOG_EXIT_USER, "directory: ",dir," must be an absolute path") ; + sa.len = 0 ; + size_t namelen = strlen(*argv) ; + char const *sv = 0 ; + char bname[namelen + 1] ; + char dname[namelen + 1] ; + char const *directory_forced = 0 ; - if (sv[0] != '/') - log_die(LOG_EXIT_USER, "service: ",sv," must be an absolute path") ; + if (argv[0][0] == '/') { - char name[strlen(sv)] ; + if (!ob_dirname(dname, *argv)) + log_dieu(LOG_EXIT_SYS, "get dirname of: ", *argv) ; - if (!ob_basename(name, sv)) - log_dieusys(LOG_EXIT_SYS, "get basename of: ", sv) ; + if (!ob_basename(bname, *argv)) + log_dieu(LOG_EXIT_SYS, "get basename of: ", *argv) ; - parser(sv, dir, info, force, 0) ; + sv = bname ; + directory_forced = dname ; + } else + sv = *argv ; + + name_isvalid(sv) ; + + if (!service_frontend_path(&sa, sv, info->owner, directory_forced)) + log_dieu(LOG_EXIT_USER, "find service frontend file of: ", sv) ; + + /** need to check all the contents of the stralloc. + * service can be a directory name. In this case + * we parse all services it contains. */ + size_t pos = 0 ; + FOREACH_SASTR(&sa, pos) + parse_service(sa.s + pos, info, force, conf) ; + } - log_info("Written successfully: ",name, " at: ",dir) ; + stralloc_free(&sa) ; return 0 ; } diff --git a/src/lib66/exec/ssexec_tree.c b/src/lib66/exec/ssexec_tree.c index f0db48cd..04230cc3 100644 --- a/src/lib66/exec/ssexec_tree.c +++ b/src/lib66/exec/ssexec_tree.c @@ -54,6 +54,14 @@ static char const *cleantree = 0 ; +typedef enum visit_e visit ; +enum visit_e +{ + SS_WHITE = 0, + SS_GRAY, + SS_BLACK +} ; + typedef struct tree_opts_map_s tree_opts_map_t ; struct tree_opts_map_s { @@ -520,13 +528,10 @@ void tree_groups(char const *base, char const *treename, char const *value) resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; - size_t nb = 0, baselen = strlen(base) ; + size_t nb = 0 ; char pack[UINT_FMT] ; - char solve[baselen + SS_SYSTEM_LEN + 1] ; char const *val ; - auto_strings(solve, base, SS_SYSTEM) ; - log_trace("set: ", treename," to group ..." ) ; if (!strcmp(value, "none")) { @@ -542,67 +547,21 @@ void tree_groups(char const *base, char const *treename, char const *value) uint_pack(pack, nb) ; pack[uint_fmt(pack, nb)] = 0 ; - if (!resolve_read(wres, solve, treename)) - log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", solve, "/.resolve/", treename) ; + if (!resolve_read_g(wres, base, treename)) + log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", treename) ; - if (!resolve_modify_field(wres, TREE_ENUM_GROUPS, val) || - !resolve_modify_field(wres, TREE_ENUM_NGROUPS, pack)) + if (!resolve_modify_field(wres, E_RESOLVE_TREE_GROUPS, val) || + !resolve_modify_field(wres, E_RESOLVE_TREE_NGROUPS, pack)) log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; - if (!resolve_write(wres, solve, treename)) - log_dieusys(LOG_EXIT_SYS, "write resolve file of: ", solve, "/.resolve/", treename) ; + if (!resolve_write_g(wres, base, treename)) + log_dieusys(LOG_EXIT_SYS, "write resolve file of: ", treename) ; resolve_free(wres) ; log_info("Set successfully: ", treename, " to group: ", value) ; } -void create_backupdir(char const *base, char const *treename) -{ - log_flow() ; - - int r ; - size_t baselen = strlen(base) ; - size_t treenamelen = strlen(treename) ; - char tmp[baselen + 1 + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treenamelen + 1] ; - - auto_strings(tmp, base, SS_SYSTEM, SS_BACKUP, "/", treename) ; - - r = scan_mode(tmp,S_IFDIR) ; - if (r || (r == -1)) { - - log_trace("remove existing backup: ",tmp) ; - if (!dir_rm_rf(tmp)) - log_dieusys_nclean(LOG_EXIT_SYS, &cleanup, "remove: ", tmp) ; - } - - auto_dir(tmp,0755) ; -} - -void tree_master_modify_current(char const *base, char const *treename) -{ - resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ; - size_t baselen = strlen(base) ; - stralloc sa = STRALLOC_ZERO ; - char solve[baselen + SS_SYSTEM_LEN + 1] ; - auto_strings(solve, base, SS_SYSTEM) ; - - if (!resolve_get_field_tosa_g(&sa, base, 0, SS_MASTER + 1, DATA_TREE_MASTER, TREE_ENUM_MASTER_CURRENT)) - log_dieu(LOG_EXIT_SYS, "get value of field current of resolve Master file of trees") ; - - if (!strcmp(sa.s, treename)) { - - if (!resolve_modify_field(wres, TREE_ENUM_MASTER_CURRENT, 0)) - log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", SS_MASTER + 1) ; - - if (!resolve_write(wres, solve, SS_MASTER + 1)) - log_dieusys(LOG_EXIT_SYS, "write resolve file of :", solve, SS_MASTER) ; - } - - stralloc_free(&sa) ; -} - void tree_master_modify_contents(char const *base, char const *treename) { stralloc sa = STRALLOC_ZERO ; @@ -613,12 +572,12 @@ void tree_master_modify_contents(char const *base, char const *treename) char const *exclude[2] = { SS_MASTER + 1, 0 } ; - log_trace("modify field contents of resolve Master of file of trees") ; + log_trace("modify field contents of resolve Master file of trees") ; auto_strings(solve, base, SS_SYSTEM, SS_RESOLVE) ; if (!sastr_dir_get(&sa, solve, exclude, S_IFREG)) - log_dieu_nclean(LOG_EXIT_SYS, &cleanup,"get resolve file of tree: ", treename) ; + log_dieu_nclean(LOG_EXIT_SYS, &cleanup, "get resolve files of tree: ", treename) ; size_t ncontents = sastr_nelement(&sa) ; @@ -626,10 +585,8 @@ void tree_master_modify_contents(char const *base, char const *treename) if (!sastr_rebuild_in_oneline(&sa)) log_dieu_nclean(LOG_EXIT_SYS, &cleanup, "rebuild stralloc") ; - solve[baselen + SS_SYSTEM_LEN] = 0 ; - - if (!resolve_read(wres, solve, SS_MASTER + 1)) - log_dieusys(LOG_EXIT_SYS, "read resolve Master file of trees") ; + if (!resolve_read_g(wres, base, SS_MASTER + 1)) + log_dieusys_nclean(LOG_EXIT_SYS, &cleanup, "read resolve Master file of trees") ; mres.ncontents = (uint32_t)ncontents ; @@ -638,8 +595,8 @@ void tree_master_modify_contents(char const *base, char const *treename) else mres.contents = resolve_add_string(wres, "") ; - if (!resolve_write(wres, solve, SS_MASTER + 1)) - log_dieusys(LOG_EXIT_SYS, "write resolve Master file of trees") ; + if (!resolve_write_g(wres, base, SS_MASTER + 1)) + log_dieusys_nclean(LOG_EXIT_SYS, &cleanup, "write resolve Master file of trees") ; stralloc_free(&sa) ; resolve_free(wres) ; @@ -652,9 +609,6 @@ void tree_create(graph_t *g, ssexec_t *info, tree_what_t *what) resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; tree_seed_t seed = TREE_SEED_ZERO ; - char solve[info->base.len + SS_SYSTEM_LEN + SS_RESOLVE_LEN + 1] ; - - auto_strings(solve, info->base.s, SS_SYSTEM) ; resolve_init(wres) ; @@ -671,9 +625,6 @@ void tree_create(graph_t *g, ssexec_t *info, tree_what_t *what) char svdir[info->tree.len + SS_SVDIRS_LEN + SS_SVC_LEN + 2] ; auto_strings(svdir, info->tree.s, SS_SVDIRS, SS_SVC, "/") ; - log_trace("creating backup directory of tree: ", info->treename.s, "...") ; - create_backupdir(info->base.s, info->treename.s) ; - /** unset cleanup */ cleantree = 0 ; @@ -685,8 +636,8 @@ void tree_create(graph_t *g, ssexec_t *info, tree_what_t *what) tres.ngroups = 1 ; log_trace("write resolve file of: ", info->treename.s) ; - if (!resolve_write(wres, solve, info->treename.s)) - log_dieu_nclean(LOG_EXIT_SYS, &cleanup, "write resolve file: ", solve, SS_RESOLVE, "/", info->treename.s) ; + if (!resolve_write_g(wres, info->base.s, info->treename.s)) + log_dieu_nclean(LOG_EXIT_SYS, &cleanup, "write resolve file of: ", info->treename.s) ; /** check of the seed.sa.len: if the seed file is not parse at this point * the seed.sa.s + seed.depends is empty which produce a segmentation fault @@ -715,22 +666,19 @@ void tree_master_enable_disable(char const *base, char const *treename, uint8_t { log_flow() ; - size_t pos = 0, nb = 0, baselen = strlen(base), len = 0 ; + size_t pos = 0, nb = 0, len = 0 ; stralloc sa = STRALLOC_ZERO ; resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ; - char solve[baselen + SS_SYSTEM_LEN + 1] ; log_trace(!action ? "disable" : "enable"," tree: ", treename, " from: ", SS_MASTER + 1) ; - auto_strings(solve, base, SS_SYSTEM) ; - - if (!resolve_read(wres, solve, SS_MASTER + 1)) - log_dieusys(LOG_EXIT_SYS, "read inner resolve file of trees") ; + if (!resolve_read_g(wres, base, SS_MASTER + 1)) + log_dieusys(LOG_EXIT_SYS, "read resolve Master file of trees") ; if (!mres.nenabled && action) { - if (!resolve_modify_field(wres, TREE_ENUM_MASTER_ENABLED, treename)) - log_dieusys(LOG_EXIT_SYS, "modify inner resolve file of trees") ; + if (!resolve_modify_field(wres, E_RESOLVE_TREE_MASTER_ENABLED, treename)) + log_dieusys(LOG_EXIT_SYS, "modify resolve Master file of trees") ; mres.nenabled = 1 ; goto write ; @@ -774,15 +722,15 @@ void tree_master_enable_disable(char const *base, char const *treename, uint8_t if (!stralloc_0(&sa)) log_die_nomem("stralloc") ; - if (!resolve_modify_field(wres, TREE_ENUM_MASTER_ENABLED, sa.s)) + if (!resolve_modify_field(wres, E_RESOLVE_TREE_MASTER_ENABLED, sa.s)) log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", SS_MASTER + 1) ; mres.nenabled = nb ; } write: - if (!resolve_write(wres, solve, SS_MASTER + 1)) - log_dieusys(LOG_EXIT_SYS, "write inner resolve file of trees") ; + if (!resolve_write_g(wres, base, SS_MASTER + 1)) + log_dieusys(LOG_EXIT_SYS, "write resolve Master file of trees") ; resolve_free(wres) ; stralloc_free(&sa) ; @@ -830,9 +778,6 @@ void tree_enable_disable(graph_t *g, char const *base, char const *treename, uin resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; - size_t baselen = strlen(base) ; - - char solve[baselen + SS_SYSTEM_LEN + 1] ; uint8_t disen = tree_isenabled(base, treename) ; if (disen < 0) @@ -847,10 +792,8 @@ void tree_enable_disable(graph_t *g, char const *base, char const *treename, uin return ; } - auto_strings(solve, base, SS_SYSTEM) ; - - if (!resolve_modify_field_g(wres, base, treename, TREE_ENUM_DISEN, !action ? "0" : "1")) - log_dieu(LOG_EXIT_SYS, "modify field: ", resolve_tree_field_table[TREE_ENUM_DISEN].field," of tree: ", treename, " with value: ", !action ? "0" : "1") ; + if (!resolve_modify_field_g(wres, base, treename, E_RESOLVE_TREE_DISEN, !action ? "0" : "1")) + log_dieu(LOG_EXIT_SYS, "modify field: ", resolve_tree_field_table[E_RESOLVE_TREE_DISEN].field," of tree: ", treename, " with value: ", !action ? "0" : "1") ; tree_enable_disable_deps(g, base, treename, action) ; tree_master_enable_disable(base, treename, action) ; @@ -873,17 +816,14 @@ void tree_depends_requiredby(graph_t *g, char const *base, char const *treename, resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; - size_t pos = 0, len = 0, nb = 0, baselen = strlen(base), element = 0 ; - uint8_t ewhat = !requiredby ? TREE_ENUM_DEPENDS : TREE_ENUM_REQUIREDBY ; - uint8_t nwhat = !requiredby ? TREE_ENUM_NDEPENDS : TREE_ENUM_NREQUIREDBY ; + size_t pos = 0, len = 0, nb = 0, element = 0 ; + uint8_t ewhat = !requiredby ? E_RESOLVE_TREE_DEPENDS : E_RESOLVE_TREE_REQUIREDBY ; + uint8_t nwhat = !requiredby ? E_RESOLVE_TREE_NDEPENDS : E_RESOLVE_TREE_NREQUIREDBY ; stralloc sa = STRALLOC_ZERO ; char pack[UINT_FMT] ; - char solve[baselen + SS_SYSTEM_LEN + 1] ; log_trace("manage ", !requiredby ? "dependencies" : "required by", " for tree: ", treename, "..." ) ; - auto_strings(solve, base, SS_SYSTEM) ; - if (graph_matrix_get_edge_g_sorted_sa(&sa, g, treename, requiredby, 0) < 0) log_dieu(LOG_EXIT_SYS,"get sorted ", requiredby ? "required by" : "dependency", " list of tree: ", treename) ; @@ -939,15 +879,15 @@ void tree_depends_requiredby(graph_t *g, char const *base, char const *treename, uint_pack(pack, nb) ; pack[uint_fmt(pack, nb)] = 0 ; - if (!resolve_read(wres, solve, treename)) - log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", solve, "/.resolve/", treename) ; + if (!resolve_read_g(wres, base, treename)) + log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", treename) ; if (!resolve_modify_field(wres, ewhat, sa.s) || !resolve_modify_field(wres, nwhat, pack)) log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; - if (!resolve_write(wres, solve, treename)) - log_dieusys(LOG_EXIT_SYS, "write resolve file of: ", solve, "/.resolve/", treename) ; + if (!resolve_write_g(wres, base, treename)) + log_dieusys(LOG_EXIT_SYS, "write resolve file of: ", treename) ; if (!none) { @@ -1028,8 +968,8 @@ void tree_rules(char const *base, char const *treename, uid_t *uids, uint8_t wha auto_strings(tmp, base, SS_SYSTEM) ; - if (!resolve_read(wres, tmp, treename)) - log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", tmp, "/.resolve/", treename) ; + if (!resolve_read_g(wres, base, treename)) + log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", treename) ; if (tres.nallow) if (!sastr_clean_string(&sa, tres.sa.s + tres.allow)) @@ -1118,7 +1058,6 @@ void tree_rules(char const *base, char const *treename, uid_t *uids, uint8_t wha } } - tmp[baselen + SS_SYSTEM_LEN] = 0 ; len = sa.len ; char t[len + 1] ; @@ -1137,10 +1076,10 @@ void tree_rules(char const *base, char const *treename, uid_t *uids, uint8_t wha if (!stralloc_0(&sa)) log_die_nomem("stralloc") ; - if (!resolve_modify_field(wres, TREE_ENUM_ALLOW, sa.s)) + if (!resolve_modify_field(wres, E_RESOLVE_TREE_ALLOW, sa.s)) log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; - if (!resolve_write(wres, tmp, treename)) + if (!resolve_write_g(wres, base, treename)) log_dieusys(LOG_EXIT_SYS, "write resolve file of: ", treename) ; stralloc_free(&sa) ; @@ -1153,26 +1092,16 @@ void tree_remove(graph_t *g, char const *base, char const *treename) { log_flow() ; - int r ; size_t baselen = strlen(base), treenamelen = strlen(treename) ; - resolve_tree_t tres = RESOLVE_TREE_ZERO ; - resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; - - char tree[baselen + SS_SYSTEM_LEN + 1 + treenamelen + 1] ; - auto_strings(tree, base, SS_SYSTEM, "/", treename) ; + char tmp[baselen + SS_SYSTEM_LEN + 1 + treenamelen + 1] ; - log_trace("delete: ", tree, "..." ) ; + auto_strings(tmp, base, SS_SYSTEM, "/", treename) ; - if (!dir_rm_rf(tree)) - log_dieusys(LOG_EXIT_SYS,"delete: ", tree) ; + log_trace("delete: ", tmp, "..." ) ; - char tmp[baselen + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treenamelen + 1] ; - - auto_strings(tmp, base, SS_SYSTEM) ; - - if (!resolve_read(wres, tmp, treename)) - log_dieusys(LOG_EXIT_SYS, "read resolve file of: ", tmp, "/.resolve/", treename) ; + if (!dir_rm_rf(tmp)) + log_dieusys(LOG_EXIT_SYS,"delete: ", tmp) ; tree_enable_disable(g, base, treename, 0) ; @@ -1181,27 +1110,17 @@ void tree_remove(graph_t *g, char const *base, char const *treename) /** requiredby */ tree_depends_requiredby_deps(g, base, treename, 1, 1, treename) ; - + /** + * + * need to remove the symlinks of services at system/.resolve/service/<services> + * + * */ log_trace("remove resolve file of tree: ", treename) ; - - resolve_rmfile(tmp, treename) ; - - auto_strings(tmp + baselen + SS_SYSTEM_LEN, SS_BACKUP, "/", treename) ; - - r = scan_mode(tmp,S_IFDIR) ; - if (r || (r < 0)) { - - log_trace("delete backup of tree: ", tmp, "...") ; - if (!dir_rm_rf(tmp)) - log_dieusys(LOG_EXIT_SYS, "delete: ", tmp) ; - - } + resolve_remove_g(base, treename, DATA_TREE) ; tree_master_modify_contents(base, treename) ; - tree_master_modify_current(base, treename) ; - - resolve_free(wres) ; + tree_switch_current(base, treename) ; log_info("Deleted successfully: ", treename) ; } @@ -1272,9 +1191,9 @@ void tree_clone(char const *clone, ssexec_t *info) char status[info->base.len + SS_SYSTEM_LEN + 1 + clonelen + SS_SVDIRS_LEN + SS_SVC_LEN + SS_STATE_LEN + 1 + SS_STATUS_LEN + 1] ; auto_strings(status, info->base.s, SS_SYSTEM, "/", clone, SS_SVDIRS, SS_SVC, SS_STATE, "/", SS_STATUS) ; - if (!resolve_modify_field(wres, SERVICE_ENUM_TREE, clone_target) || - !resolve_modify_field(wres, SERVICE_ENUM_TREENAME, clone) || - !resolve_modify_field(wres, SERVICE_ENUM_STATUS, status)) + if (!resolve_modify_field(wres, E_RESOLVE_SERVICE_TREE, clone_target) || + !resolve_modify_field(wres, E_RESOLVE_SERVICE_TREENAME, clone) || + !resolve_modify_field(wres, E_RESOLVE_SERVICE_STATUS, status)) log_dieusys_nclean(LOG_EXIT_SYS, &cleanup, "modify resolve file of: ", name) ; if (!resolve_write(wres,clone_res,name)) @@ -1304,7 +1223,7 @@ void tree_clone(char const *clone, ssexec_t *info) if (!resolve_read(wres, system, clone)) log_dieusys_nclean(LOG_EXIT_SYS,&cleanup,"read resolve file of tree: ", clone) ; - if(!resolve_modify_field(wres, TREE_ENUM_DISEN, 0)) + if(!resolve_modify_field(wres, E_RESOLVE_TREE_DISEN, 0)) log_dieusys(LOG_EXIT_SYS, "modify resolve file of tree: ", clone) ; if (!resolve_write(wres, system, clone)) @@ -1439,8 +1358,7 @@ int ssexec_tree(int argc, char const *const *argv, ssexec_t *info) if (!r && what.remove) log_dieusys(LOG_EXIT_SYS,"find tree: ", info->treename.s) ; - if (!graph_build_g(&graph, info->base.s, 0, DATA_TREE, 0)) - log_dieu(LOG_EXIT_SYS,"build the graph") ; + graph_build_tree(&graph, info->base.s) ; if (what.remove) { tree_remove(&graph, info->base.s, info->treename.s) ; -- GitLab