From 7fa95f07c33518f74ca2c8058b733cabafc652a8 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Fri, 16 Jun 2023 16:44:36 +1100 Subject: [PATCH] add service_switch_tree function --- src/include/66/service.h | 1 + src/lib66/service/deps-lib/deps | 1 + src/lib66/service/service_switch_tree.c | 40 +++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 src/lib66/service/service_switch_tree.c diff --git a/src/include/66/service.h b/src/include/66/service.h index 732f9043..fe26e010 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 af99bdb4..60b6ffb5 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 00000000..555cd843 --- /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 -- GitLab