diff --git a/src/include/66/service.h b/src/include/66/service.h index 732f90431b36f8ebdce20907f0a5263fc6b680f2..fe26e010d2453214dd21e0c884501c8f8cd399e7 100644 --- a/src/include/66/service.h +++ b/src/include/66/service.h @@ -316,6 +316,7 @@ extern void service_resolve_write(resolve_service_t *res) ; extern void service_resolve_write_tmp(resolve_service_t *res, char const *dst, uint8_t force) ; extern int service_resolve_write_cdb(cdbmaker *c, resolve_service_t *sres) ; extern void service_enable_disable(graph_t *g, unsigned int idx, resolve_service_t *ares, unsigned int areslen, uint8_t action, visit_t *visit, uint8_t propagate) ; +extern void service_switch_tree(resolve_service_t *res, char const *base, char const *totreename) ; /* avoid circular dependencies by prototyping the ss_state_t instead * of calling the state.h header file*/ typedef struct ss_state_s ss_state_t, *ss_state_t_ref ; diff --git a/src/lib66/service/deps-lib/deps b/src/lib66/service/deps-lib/deps index af99bdb4e3ea311a76f60f36809883997114e78d..60b6ffb5d63fd949ea54b5c41111ceeef448f78d 100644 --- a/src/lib66/service/deps-lib/deps +++ b/src/lib66/service/deps-lib/deps @@ -16,6 +16,7 @@ service_resolve_write.o service_resolve_read_cdb.o service_resolve_write_cdb.o service_resolve_write_tmp.o +service_switch_tree.o -loblibs -lskarnet diff --git a/src/lib66/service/service_switch_tree.c b/src/lib66/service/service_switch_tree.c new file mode 100644 index 0000000000000000000000000000000000000000..555cd84379714931e1e2683b810ca65bf67b95b9 --- /dev/null +++ b/src/lib66/service/service_switch_tree.c @@ -0,0 +1,40 @@ +/* + * service_switch_tree.c + * + * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> + * + * All rights reserved. + * + * This file is part of Obarun. It is subject to the license terms in + * the LICENSE file found in the top-level directory of this + * distribution. + * This file may not be copied, modified, propagated, or distributed + * except according to the terms contained in the LICENSE file./ + */ + +#include <stdlib.h> + +#include <oblibs/log.h> + +#include <66/service.h> +#include <66/resolve.h> +#include <66/tree.h> + +void service_switch_tree(resolve_service_t *res, char const *base, char const *totreename) +{ + log_flow() ; + + resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ; + + tree_service_remove(base, res->sa.s + res->treename, res->sa.s + res->name) ; + + tree_service_add(base, totreename, res->sa.s + res->name) ; + + if (!service_resolve_modify_field(res, E_RESOLVE_SERVICE_TREENAME, totreename)) + log_dieu(LOG_EXIT_SYS, "modify resolve file of: ", res->sa.s + res->name) ; + + if (!resolve_write_g(wres, base, res->sa.s + res->name)) + log_dieu(LOG_EXIT_SYS, "write resolve file of: ", res->sa.s + res->name) ; + + free(wres) ; +} \ No newline at end of file