From 019f89b7e57af0d204c404491a35b32a80f00173 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sun, 27 Nov 2022 12:36:38 +1100 Subject: [PATCH] Provide the 66 general tool --- package/deps.mak | 72 +-- package/modes | 18 +- package/targets.mak | 18 +- src/66/66-all.c | 37 -- src/66/66-disable.c | 32 -- src/66/66-enable.c | 37 -- src/66/66-env.c | 32 -- src/66/66-init.c | 32 -- src/66/66-parse.c | 50 -- src/66/66-start.c | 32 -- src/66/66-stop.c | 32 -- src/66/66-svctl.c | 32 -- src/66/66-tree.c | 32 -- src/66/66.c | 521 ++++++++++++++++++ src/66/deps-exe/{66-all => 66} | 0 src/66/deps-exe/66-boot | 5 - src/66/deps-exe/66-disable | 5 - src/66/deps-exe/66-enable | 4 - src/66/deps-exe/66-env | 6 - src/66/deps-exe/66-info | 4 - src/66/deps-exe/66-init | 4 - src/66/deps-exe/66-inresolve | 3 - src/66/deps-exe/66-inservice | 5 - src/66/deps-exe/66-instate | 3 - src/66/deps-exe/66-intree | 4 - src/66/deps-exe/66-parse | 4 - src/66/deps-exe/66-start | 4 - src/66/deps-exe/66-stop | 4 - src/66/deps-exe/66-svctl | 5 - src/66/deps-exe/66-tree | 5 - src/include/66/ssexec.h | 61 +- src/lib66/exec/deps-lib/deps | 11 +- .../66-boot.c => lib66/exec/ssexec_boot.c} | 211 +++---- src/lib66/exec/ssexec_help.c | 277 ++++++++-- .../exec/ssexec_inresolve.c} | 73 +-- .../exec/ssexec_inservice.c} | 231 ++++---- .../exec/ssexec_instate.c} | 50 +- .../exec/ssexec_intree.c} | 94 +--- .../exec/ssexec_scanctl.c} | 88 +-- .../exec/ssexec_scandir.c} | 36 +- 40 files changed, 1091 insertions(+), 1083 deletions(-) delete mode 100644 src/66/66-all.c delete mode 100644 src/66/66-disable.c delete mode 100644 src/66/66-enable.c delete mode 100644 src/66/66-env.c delete mode 100644 src/66/66-init.c delete mode 100644 src/66/66-parse.c delete mode 100644 src/66/66-start.c delete mode 100644 src/66/66-stop.c delete mode 100644 src/66/66-svctl.c delete mode 100644 src/66/66-tree.c create mode 100644 src/66/66.c rename src/66/deps-exe/{66-all => 66} (100%) delete mode 100644 src/66/deps-exe/66-boot delete mode 100644 src/66/deps-exe/66-disable delete mode 100644 src/66/deps-exe/66-enable delete mode 100644 src/66/deps-exe/66-env delete mode 100644 src/66/deps-exe/66-info delete mode 100644 src/66/deps-exe/66-init delete mode 100644 src/66/deps-exe/66-inresolve delete mode 100644 src/66/deps-exe/66-inservice delete mode 100644 src/66/deps-exe/66-instate delete mode 100644 src/66/deps-exe/66-intree delete mode 100644 src/66/deps-exe/66-parse delete mode 100644 src/66/deps-exe/66-start delete mode 100644 src/66/deps-exe/66-stop delete mode 100644 src/66/deps-exe/66-svctl delete mode 100644 src/66/deps-exe/66-tree rename src/{66/66-boot.c => lib66/exec/ssexec_boot.c} (78%) rename src/{66/66-inresolve.c => lib66/exec/ssexec_inresolve.c} (90%) rename src/{66/66-inservice.c => lib66/exec/ssexec_inservice.c} (84%) rename src/{66/66-instate.c => lib66/exec/ssexec_instate.c} (76%) rename src/{66/66-intree.c => lib66/exec/ssexec_intree.c} (86%) rename src/{66/66-scanctl.c => lib66/exec/ssexec_scanctl.c} (74%) rename src/{66/66-scandir.c => lib66/exec/ssexec_scandir.c} (96%) diff --git a/package/deps.mak b/package/deps.mak index 9f740430..57133d1f 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -16,28 +16,15 @@ src/include/66/svc.h: src/include/66/graph.h src/include/66/service.h src/includ src/include/66/tree.h: src/include/66/resolve.h src/include/66/ssexec.h src/include/66/utils.h: src/include/66/service.h src/include/66/ssexec.h src/include/66/write.h: src/include/66/service.h -src/66/66-all.o src/66/66-all.lo: src/66/66-all.c src/include/66/ssexec.h src/66/66-boot.o src/66/66-boot.lo: src/66/66-boot.c src/include/66/config.h src/include/66/constants.h -src/66/66-disable.o src/66/66-disable.lo: src/66/66-disable.c src/include/66/ssexec.h -src/66/66-enable.o src/66/66-enable.lo: src/66/66-enable.c src/include/66/ssexec.h -src/66/66-env.o src/66/66-env.lo: src/66/66-env.c src/include/66/ssexec.h +src/66/66.o src/66/66.lo: src/66/66.c src/include/66/sanitize.h src/include/66/ssexec.h src/include/66/tree.h src/include/66/utils.h src/66/66-fdholder-filler.o src/66/66-fdholder-filler.lo: src/66/66-fdholder-filler.c src/include/66/constants.h src/66/66-hpr.o src/66/66-hpr.lo: src/66/66-hpr.c src/include/66/config.h src/include/66/hpr.h -src/66/66-init.o src/66/66-init.lo: src/66/66-init.c src/include/66/ssexec.h -src/66/66-inresolve.o src/66/66-inresolve.lo: src/66/66-inresolve.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h -src/66/66-inservice.o src/66/66-inservice.lo: src/66/66-inservice.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/environ.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h -src/66/66-instate.o src/66/66-instate.lo: src/66/66-instate.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/state.h src/include/66/utils.h -src/66/66-intree.o src/66/66-intree.lo: src/66/66-intree.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/tree.h src/include/66/utils.h src/66/66-oneshot.o src/66/66-oneshot.lo: src/66/66-oneshot.c src/include/66/constants.h src/include/66/resolve.h src/include/66/service.h -src/66/66-parse.o src/66/66-parse.lo: src/66/66-parse.c src/include/66/ssexec.h src/66/66-scanctl.o src/66/66-scanctl.lo: src/66/66-scanctl.c src/include/66/svc.h src/include/66/utils.h src/66/66-scandir.o src/66/66-scandir.lo: src/66/66-scandir.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/svc.h src/include/66/utils.h src/66/66-shutdown.o src/66/66-shutdown.lo: src/66/66-shutdown.c src/include/66/config.h src/include/66/hpr.h src/66/66-shutdownd.o src/66/66-shutdownd.lo: src/66/66-shutdownd.c src/include/66/config.h src/include/66/constants.h -src/66/66-start.o src/66/66-start.lo: src/66/66-start.c src/include/66/ssexec.h -src/66/66-stop.o src/66/66-stop.lo: src/66/66-stop.c src/include/66/ssexec.h -src/66/66-svctl.o src/66/66-svctl.lo: src/66/66-svctl.c src/include/66/ssexec.h -src/66/66-tree.o src/66/66-tree.lo: src/66/66-tree.c src/include/66/ssexec.h src/extra-tools/66-echo.o src/extra-tools/66-echo.lo: src/extra-tools/66-echo.c src/extra-tools/66-nuke.o src/extra-tools/66-nuke.lo: src/extra-tools/66-nuke.c src/extra-tools/66-umountall.o src/extra-tools/66-umountall.lo: src/extra-tools/66-umountall.c src/include/66/config.h @@ -53,22 +40,30 @@ src/lib66/environ/env_make_symlink.o src/lib66/environ/env_make_symlink.lo: src/ src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_prepare_for_write.lo: src/lib66/environ/env_prepare_for_write.c src/include/66/constants.h src/include/66/environ.h src/include/66/parser.h src/include/66/service.h src/lib66/environ/env_resolve_conf.o src/lib66/environ/env_resolve_conf.lo: src/lib66/environ/env_resolve_conf.c src/include/66/constants.h src/include/66/environ.h src/include/66/utils.h src/lib66/exec/ssexec_all.o src/lib66/exec/ssexec_all.lo: src/lib66/exec/ssexec_all.c src/include/66/constants.h src/include/66/graph.h src/include/66/ssexec.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h +src/lib66/exec/ssexec_boot.o src/lib66/exec/ssexec_boot.lo: src/lib66/exec/ssexec_boot.c src/include/66/config.h src/include/66/constants.h src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_disable.lo: src/lib66/exec/ssexec_disable.c src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_enable.lo: src/lib66/exec/ssexec_enable.c src/include/66/constants.h src/include/66/environ.h src/include/66/parser.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_env.lo: src/lib66/exec/ssexec_env.c src/include/66/config.h src/include/66/constants.h src/include/66/environ.h src/include/66/resolve.h src/include/66/ssexec.h src/include/66/state.h src/include/66/utils.h src/include/66/write.h src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_free.lo: src/lib66/exec/ssexec_free.c src/include/66/ssexec.h src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_help.lo: src/lib66/exec/ssexec_help.c src/include/66/ssexec.h -src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_init.lo: src/lib66/exec/ssexec_init.c src/include/66/constants.h src/include/66/resolve.h src/include/66/sanitize.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h +src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_init.lo: src/lib66/exec/ssexec_init.c src/include/66/config.h src/include/66/constants.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/tree.h +src/lib66/exec/ssexec_inresolve.o src/lib66/exec/ssexec_inresolve.lo: src/lib66/exec/ssexec_inresolve.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h +src/lib66/exec/ssexec_inservice.o src/lib66/exec/ssexec_inservice.lo: src/lib66/exec/ssexec_inservice.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/environ.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h +src/lib66/exec/ssexec_instate.o src/lib66/exec/ssexec_instate.lo: src/lib66/exec/ssexec_instate.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/ssexec.h src/include/66/state.h src/include/66/utils.h +src/lib66/exec/ssexec_intree.o src/lib66/exec/ssexec_intree.lo: src/lib66/exec/ssexec_intree.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/tree.h src/include/66/utils.h src/lib66/exec/ssexec_main.o src/lib66/exec/ssexec_main.lo: src/lib66/exec/ssexec_main.c src/include/66/constants.h src/include/66/ssexec.h src/include/66/tree.h src/include/66/utils.h src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_parse.lo: src/lib66/exec/ssexec_parse.c src/include/66/parser.h src/include/66/ssexec.h src/include/66/utils.h +src/lib66/exec/ssexec_reconfigure.o src/lib66/exec/ssexec_reconfigure.lo: src/lib66/exec/ssexec_reconfigure.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h +src/lib66/exec/ssexec_reload.o src/lib66/exec/ssexec_reload.lo: src/lib66/exec/ssexec_reload.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h +src/lib66/exec/ssexec_restart.o src/lib66/exec/ssexec_restart.lo: src/lib66/exec/ssexec_restart.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_start.lo: src/lib66/exec/ssexec_start.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h -src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_stop.lo: src/lib66/exec/ssexec_stop.c src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/utils.h +src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_stop.lo: src/lib66/exec/ssexec_stop.c src/include/66/config.h src/include/66/graph.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/lib66/exec/ssexec_svctl.o src/lib66/exec/ssexec_svctl.lo: src/lib66/exec/ssexec_svctl.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/utils.h src/lib66/exec/ssexec_tree.o src/lib66/exec/ssexec_tree.lo: src/lib66/exec/ssexec_tree.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/sanitize.h src/include/66/service.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h src/lib66/graph/graph_build_g.o src/lib66/graph/graph_build_g.lo: src/lib66/graph/graph_build_g.c src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h -src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service.lo: src/lib66/graph/graph_build_service.c src/include/66/constants.h src/include/66/graph.h src/include/66/service.h src/include/66/state.h src/lib66/graph/graph_build_service_bytree.o src/lib66/graph/graph_build_service_bytree.lo: src/lib66/graph/graph_build_service_bytree.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/lib66/graph/graph_build_service_bytree_from_src.o src/lib66/graph/graph_build_service_bytree_from_src.lo: src/lib66/graph/graph_build_service_bytree_from_src.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h +src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service.lo: src/lib66/graph/graph_build_service.c src/include/66/constants.h src/include/66/graph.h src/include/66/service.h src/include/66/state.h src/lib66/graph/graph_build_service_from_list.o src/lib66/graph/graph_build_service_from_list.lo: src/lib66/graph/graph_build_service_from_list.c src/include/66/config.h src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_build_tree.lo: src/lib66/graph/graph_build_tree.c src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/tree.h src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_compute_dependencies.lo: src/lib66/graph/graph_compute_dependencies.c @@ -131,7 +126,7 @@ src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_set_struct.lo: src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write.lo: src/lib66/resolve/resolve_write.c src/include/66/constants.h src/include/66/resolve.h src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_cdb.lo: src/lib66/resolve/resolve_write_cdb.c src/include/66/resolve.h src/include/66/service.h src/include/66/tree.h src/lib66/resolve/resolve_write_g.o src/lib66/resolve/resolve_write_g.lo: src/lib66/resolve/resolve_write_g.c src/include/66/constants.h src/include/66/resolve.h -src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_fdholder.lo: src/lib66/sanitize/sanitize_fdholder.c src/include/66/constants.h src/include/66/service.h src/include/66/state.h +src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_fdholder.lo: src/lib66/sanitize/sanitize_fdholder.c src/include/66/constants.h src/include/66/enum.h src/include/66/service.h src/include/66/state.h src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_init.lo: src/lib66/sanitize/sanitize_init.c src/include/66/constants.h src/include/66/enum.h src/include/66/resolve.h src/include/66/sanitize.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/utils.h src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_livestate.lo: src/lib66/sanitize/sanitize_livestate.c src/include/66/constants.h src/include/66/sanitize.h src/include/66/service.h src/include/66/state.h src/include/66/utils.h src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_scandir.lo: src/lib66/sanitize/sanitize_scandir.c src/include/66/constants.h src/include/66/enum.h src/include/66/sanitize.h src/include/66/service.h src/include/66/state.h src/include/66/svc.h @@ -176,7 +171,8 @@ src/lib66/state/state_write.o src/lib66/state/state_write.lo: src/lib66/state/st src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_ok.lo: src/lib66/svc/svc_scandir_ok.c src/include/66/svc.h src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_scandir_send.lo: src/lib66/svc/svc_scandir_send.c src/include/66/svc.h src/lib66/svc/svc_send.o src/lib66/svc/svc_send.lo: src/lib66/svc/svc_send.c src/include/66/resolve.h src/include/66/ssexec.h src/include/66/svc.h -src/lib66/svc/svc_unsupervise.o src/lib66/svc/svc_unsupervise.lo: src/lib66/svc/svc_unsupervise.c src/include/66/graph.h src/include/66/sanitize.h src/include/66/state.h src/include/66/svc.h +src/lib66/svc/svc_send_wait.o src/lib66/svc/svc_send_wait.lo: src/lib66/svc/svc_send_wait.c src/include/66/resolve.h src/include/66/ssexec.h src/include/66/svc.h +src/lib66/svc/svc_unsupervise.o src/lib66/svc/svc_unsupervise.lo: src/lib66/svc/svc_unsupervise.c src/include/66/enum.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/state.h src/include/66/svc.h src/lib66/tree/tree_find_current.o src/lib66/tree/tree_find_current.lo: src/lib66/tree/tree_find_current.c src/include/66/constants.h src/include/66/resolve.h src/include/66/tree.h src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_get_permissions.lo: src/lib66/tree/tree_get_permissions.c src/include/66/constants.h src/include/66/utils.h src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_iscurrent.lo: src/lib66/tree/tree_iscurrent.c src/include/66/constants.h src/include/66/resolve.h src/include/66/tree.h @@ -230,36 +226,16 @@ src/lib66/write/write_logger.o src/lib66/write/write_logger.lo: src/lib66/write/ src/lib66/write/write_oneshot.o src/lib66/write/write_oneshot.lo: src/lib66/write/write_oneshot.c src/include/66/service.h src/include/66/write.h src/lib66/write/write_service.o src/lib66/write/write_service.lo: src/lib66/write/write_service.c src/include/66/constants.h src/include/66/enum.h src/include/66/resolve.h src/include/66/service.h src/include/66/write.h src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/write_uint.c -66-all: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-all: src/66/66-all.o ${LIB66} +66: EXTRA_LIBS := -ls6 -loblibs -lskarnet +66: src/66/66.o ${LIB66} 66-boot: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SPAWN_LIB} 66-boot: src/66/66-boot.o ${LIB66} -66-disable: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-disable: src/66/66-disable.o ${LIB66} -66-enable: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-enable: src/66/66-enable.o ${LIB66} -66-env: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-env: src/66/66-env.o ${LIB66} 66-fdholder-filler: EXTRA_LIBS := -ls6 -loblibs -lskarnet 66-fdholder-filler: src/66/66-fdholder-filler.o ${LIB66} 66-hpr: EXTRA_LIBS := -loblibs -lskarnet ${SYSCLOCK_LIB} ${SOCKET_LIB} 66-hpr: src/66/66-hpr.o ${LIB66} ${LIBUTMPS} -66-info: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-info: src/66/66-info.o ${LIB66} -66-init: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-init: src/66/66-init.o ${LIB66} -66-inresolve: EXTRA_LIBS := -loblibs -lskarnet -66-inresolve: src/66/66-inresolve.o ${LIB66} -66-inservice: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SPAWN_LIB} -66-inservice: src/66/66-inservice.o ${LIB66} -66-instate: EXTRA_LIBS := -loblibs -lskarnet -66-instate: src/66/66-instate.o ${LIB66} -66-intree: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-intree: src/66/66-intree.o ${LIB66} 66-oneshot: EXTRA_LIBS := -loblibs -lskarnet 66-oneshot: src/66/66-oneshot.o ${LIB66} -66-parse: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-parse: src/66/66-parse.o ${LIB66} 66-scanctl: EXTRA_LIBS := -ls6 -loblibs -lskarnet 66-scanctl: src/66/66-scanctl.o ${LIB66} 66-scandir: EXTRA_LIBS := -ls6 -loblibs -lskarnet @@ -268,14 +244,6 @@ src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/writ 66-shutdown: src/66/66-shutdown.o ${LIB66} ${LIBUTMPS} 66-shutdownd: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SYSCLOCK_LIB} ${SOCKET_LIB} 66-shutdownd: src/66/66-shutdownd.o ${LIB66} ${LIBUTMPS} -66-start: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-start: src/66/66-start.o ${LIB66} -66-stop: EXTRA_LIBS := -ls6 -loblibs -lskarnet -66-stop: src/66/66-stop.o ${LIB66} -66-svctl: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SYSCLOCK_LIB} -66-svctl: src/66/66-svctl.o ${LIB66} -66-tree: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SPAWN_LIB} -66-tree: src/66/66-tree.o ${LIB66} 66-echo: EXTRA_LIBS := -loblibs -lskarnet 66-echo: src/extra-tools/66-echo.o 66-nuke: EXTRA_LIBS := -loblibs -lskarnet @@ -285,9 +253,9 @@ src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/writ execl-envfile: EXTRA_LIBS := -loblibs -lexecline -lskarnet execl-envfile: src/extra-tools/execl-envfile.o ${LIBEXECLINE} ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),) -lib66.a.xyzzy: src/lib66/enum/enum.o src/lib66/environ/env_append_version.o src/lib66/environ/env_check_version.o src/lib66/environ/env_clean_with_comment.o src/lib66/environ/env_compute.o src/lib66/environ/env_find_current_version.o src/lib66/environ/env_import_version_file.o src/lib66/environ/env_make_symlink.o src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_resolve_conf.o src/lib66/exec/ssexec_all.o src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_main.o src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_svctl.o src/lib66/exec/ssexec_tree.o src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service_bytree.o src/lib66/graph/graph_build_service_bytree_from_src.o src/lib66/graph/graph_build_service_from_list.o src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_remove_deps.o src/lib66/info/info_display_field_name.o src/lib66/info/info_display_list.o src/lib66/info/info_display_nline.o src/lib66/info/info_field_align.o src/lib66/info/info_getcols_fd.o src/lib66/info/info_graph_display.o src/lib66/info/info_graph_display_service.o src/lib66/info/info_graph_display_tree.o src/lib66/info/info_graph_init.o src/lib66/info/info_length_from_wchar.o src/lib66/info/info_walk.o src/lib66/instance/instance_check.o src/lib66/instance/instance_create.o src/lib66/instance/instance_splitname.o src/lib66/parse/parse_clean_line.o src/lib66/parse/parse_clean_list.o src/lib66/parse/parse_clean_quotes.o src/lib66/parse/parse_clean_runas.o src/lib66/parse/parse_compute_list.o src/lib66/parse/parse_compute_resolve.o src/lib66/parse/parse_contents.o src/lib66/parse/parse_dependencies.o src/lib66/parse/parse_error.o src/lib66/parse/parse_frontend.o src/lib66/parse/parse_line_g.o src/lib66/parse/parse_mandatory.o src/lib66/parse/parse_module.o src/lib66/parse/parse_parentheses.o src/lib66/parse/parse_section.o src/lib66/parse/parse_service.o src/lib66/parse/parse_split_from_section.o src/lib66/parse/parse_store_environ.o src/lib66/parse/parse_store_g.o src/lib66/parse/parse_store_logger.o src/lib66/parse/parse_store_main.o src/lib66/parse/parse_store_regex.o src/lib66/parse/parse_store_start_stop.o src/lib66/resolve/resolve_add_cdb.o src/lib66/resolve/resolve_add_cdb_uint.o src/lib66/resolve/resolve_add_string.o src/lib66/resolve/resolve_check.o src/lib66/resolve/resolve_check_g.o src/lib66/resolve/resolve_find_cdb.o src/lib66/resolve/resolve_free.o src/lib66/resolve/resolve_get_field_tosa.o src/lib66/resolve/resolve_get_field_tosa_g.o src/lib66/resolve/resolve_init.o src/lib66/resolve/resolve_modify_field.o src/lib66/resolve/resolve_modify_field_g.o src/lib66/resolve/resolve_read.o src/lib66/resolve/resolve_read_cdb.o src/lib66/resolve/resolve_read_g.o src/lib66/resolve/resolve_remove.o src/lib66/resolve/resolve_remove_g.o src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_g.o src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_source.o src/lib66/sanitize/sanitize_system.o src/lib66/service/service_cmp_basedir.o src/lib66/service/service_endof_dir.o src/lib66/service/service_frontend_path.o src/lib66/service/service_frontend_src.o src/lib66/service/service_graph_build.o src/lib66/service/service_graph_collect.o src/lib66/service/service_graph_g.o src/lib66/service/service_is_g.o src/lib66/service/service_resolve_array_free.o src/lib66/service/service_resolve_array_search.o src/lib66/service/service_resolve_copy.o src/lib66/service/service_resolve_get_field_tosa.o src/lib66/service/service_resolve_master_copy.o src/lib66/service/service_resolve_master_create.o src/lib66/service/service_resolve_master_get_field_tosa.o src/lib66/service/service_resolve_master_modify_field.o src/lib66/service/service_resolve_master_read_cdb.o src/lib66/service/service_resolve_master_write.o src/lib66/service/service_resolve_master_write_cdb.o src/lib66/service/service_resolve_modify_field.o src/lib66/service/service_resolve_read_cdb.o src/lib66/service/service_resolve_sort_bytype.o src/lib66/service/service_resolve_write.o src/lib66/service/service_resolve_write_cdb.o src/lib66/shutdown/hpr_shutdown.o src/lib66/shutdown/hpr_wall.o src/lib66/state/state_check.o src/lib66/state/state_get_flags.o src/lib66/state/state_messenger.o src/lib66/state/state_pack.o src/lib66/state/state_read.o src/lib66/state/state_rmfile.o src/lib66/state/state_set_flag.o src/lib66/state/state_unpack.o src/lib66/state/state_write.o src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_send.o src/lib66/svc/svc_unsupervise.o src/lib66/tree/tree_find_current.o src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_isenabled.o src/lib66/tree/tree_isinitialized.o src/lib66/tree/tree_isvalid.o src/lib66/tree/tree_ongroups.o src/lib66/tree/tree_resolve_copy.o src/lib66/tree/tree_resolve_get_field_tosa.o src/lib66/tree/tree_resolve_master_copy.o src/lib66/tree/tree_resolve_master_create.o src/lib66/tree/tree_resolve_master_get_field_tosa.o src/lib66/tree/tree_resolve_master_modify_field.o src/lib66/tree/tree_resolve_master_read_cdb.o src/lib66/tree/tree_resolve_master_write_cdb.o src/lib66/tree/tree_resolve_modify_field.o src/lib66/tree/tree_resolve_read_cdb.o src/lib66/tree/tree_resolve_write_cdb.o src/lib66/tree/tree_seed_file_isvalid.o src/lib66/tree/tree_seed_free.o src/lib66/tree/tree_seed_get_group_permissions.o src/lib66/tree/tree_seed_get_key.o src/lib66/tree/tree_seed_isvalid.o src/lib66/tree/tree_seed_parse_file.o src/lib66/tree/tree_seed_resolve_path.o src/lib66/tree/tree_seed_setseed.o src/lib66/tree/tree_sethome.o src/lib66/tree/tree_setname.o src/lib66/tree/tree_switch_current.o src/lib66/utils/get_userhome.o src/lib66/utils/module_in_cmdline.o src/lib66/utils/module_path.o src/lib66/utils/module_search_service.o src/lib66/utils/name_isvalid.o src/lib66/utils/read_svfile.o src/lib66/utils/set_livedir.o src/lib66/utils/set_livescan.o src/lib66/utils/set_livestate.o src/lib66/utils/set_ownerhome.o src/lib66/utils/set_ownersysdir.o src/lib66/utils/yourgid.o src/lib66/utils/youruid.o src/lib66/write/write_classic.o src/lib66/write/write_common.o src/lib66/write/write_environ.o src/lib66/write/write_execute_scripts.o src/lib66/write/write_logger.o src/lib66/write/write_oneshot.o src/lib66/write/write_service.o src/lib66/write/write_uint.o +lib66.a.xyzzy: src/lib66/enum/enum.o src/lib66/environ/env_append_version.o src/lib66/environ/env_check_version.o src/lib66/environ/env_clean_with_comment.o src/lib66/environ/env_compute.o src/lib66/environ/env_find_current_version.o src/lib66/environ/env_import_version_file.o src/lib66/environ/env_make_symlink.o src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_resolve_conf.o src/lib66/exec/ssexec_all.o src/lib66/exec/ssexec_boot.o src/lib66/exec/ssexec_reconfigure.o src/lib66/exec/ssexec_reload.o src/lib66/exec/ssexec_restart.o src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_inresolve.o src/lib66/exec/ssexec_inservice.o src/lib66/exec/ssexec_instate.o src/lib66/exec/ssexec_intree.o src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_svctl.o src/lib66/exec/ssexec_tree.o src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service_bytree.o src/lib66/graph/graph_build_service_bytree_from_src.o src/lib66/graph/graph_build_service_from_list.o src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_remove_deps.o src/lib66/info/info_display_field_name.o src/lib66/info/info_display_list.o src/lib66/info/info_display_nline.o src/lib66/info/info_field_align.o src/lib66/info/info_getcols_fd.o src/lib66/info/info_graph_display.o src/lib66/info/info_graph_display_service.o src/lib66/info/info_graph_display_tree.o src/lib66/info/info_graph_init.o src/lib66/info/info_length_from_wchar.o src/lib66/info/info_walk.o src/lib66/instance/instance_check.o src/lib66/instance/instance_create.o src/lib66/instance/instance_splitname.o src/lib66/parse/parse_clean_line.o src/lib66/parse/parse_clean_list.o src/lib66/parse/parse_clean_quotes.o src/lib66/parse/parse_clean_runas.o src/lib66/parse/parse_compute_list.o src/lib66/parse/parse_compute_resolve.o src/lib66/parse/parse_contents.o src/lib66/parse/parse_dependencies.o src/lib66/parse/parse_error.o src/lib66/parse/parse_frontend.o src/lib66/parse/parse_line_g.o src/lib66/parse/parse_mandatory.o src/lib66/parse/parse_module.o src/lib66/parse/parse_parentheses.o src/lib66/parse/parse_section.o src/lib66/parse/parse_service.o src/lib66/parse/parse_split_from_section.o src/lib66/parse/parse_store_environ.o src/lib66/parse/parse_store_g.o src/lib66/parse/parse_store_logger.o src/lib66/parse/parse_store_main.o src/lib66/parse/parse_store_regex.o src/lib66/parse/parse_store_start_stop.o src/lib66/resolve/resolve_add_cdb.o src/lib66/resolve/resolve_add_cdb_uint.o src/lib66/resolve/resolve_add_string.o src/lib66/resolve/resolve_check.o src/lib66/resolve/resolve_check_g.o src/lib66/resolve/resolve_find_cdb.o src/lib66/resolve/resolve_free.o src/lib66/resolve/resolve_get_field_tosa.o src/lib66/resolve/resolve_get_field_tosa_g.o src/lib66/resolve/resolve_init.o src/lib66/resolve/resolve_modify_field.o src/lib66/resolve/resolve_modify_field_g.o src/lib66/resolve/resolve_read.o src/lib66/resolve/resolve_read_cdb.o src/lib66/resolve/resolve_read_g.o src/lib66/resolve/resolve_remove.o src/lib66/resolve/resolve_remove_g.o src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_g.o src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_source.o src/lib66/sanitize/sanitize_system.o src/lib66/service/service_cmp_basedir.o src/lib66/service/service_endof_dir.o src/lib66/service/service_frontend_path.o src/lib66/service/service_frontend_src.o src/lib66/service/service_graph_build.o src/lib66/service/service_graph_collect.o src/lib66/service/service_graph_g.o src/lib66/service/service_is_g.o src/lib66/service/service_resolve_array_free.o src/lib66/service/service_resolve_array_search.o src/lib66/service/service_resolve_copy.o src/lib66/service/service_resolve_get_field_tosa.o src/lib66/service/service_resolve_master_copy.o src/lib66/service/service_resolve_master_create.o src/lib66/service/service_resolve_master_get_field_tosa.o src/lib66/service/service_resolve_master_modify_field.o src/lib66/service/service_resolve_master_read_cdb.o src/lib66/service/service_resolve_master_write.o src/lib66/service/service_resolve_master_write_cdb.o src/lib66/service/service_resolve_modify_field.o src/lib66/service/service_resolve_read_cdb.o src/lib66/service/service_resolve_sort_bytype.o src/lib66/service/service_resolve_write.o src/lib66/service/service_resolve_write_cdb.o src/lib66/shutdown/hpr_shutdown.o src/lib66/shutdown/hpr_wall.o src/lib66/state/state_check.o src/lib66/state/state_get_flags.o src/lib66/state/state_messenger.o src/lib66/state/state_pack.o src/lib66/state/state_read.o src/lib66/state/state_rmfile.o src/lib66/state/state_set_flag.o src/lib66/state/state_unpack.o src/lib66/state/state_write.o src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_send.o src/lib66/svc/svc_send_wait.o src/lib66/svc/svc_unsupervise.o src/lib66/tree/tree_find_current.o src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_isenabled.o src/lib66/tree/tree_isinitialized.o src/lib66/tree/tree_isvalid.o src/lib66/tree/tree_ongroups.o src/lib66/tree/tree_resolve_copy.o src/lib66/tree/tree_resolve_get_field_tosa.o src/lib66/tree/tree_resolve_master_copy.o src/lib66/tree/tree_resolve_master_create.o src/lib66/tree/tree_resolve_master_get_field_tosa.o src/lib66/tree/tree_resolve_master_modify_field.o src/lib66/tree/tree_resolve_master_read_cdb.o src/lib66/tree/tree_resolve_master_write_cdb.o src/lib66/tree/tree_resolve_modify_field.o src/lib66/tree/tree_resolve_read_cdb.o src/lib66/tree/tree_resolve_write_cdb.o src/lib66/tree/tree_seed_file_isvalid.o src/lib66/tree/tree_seed_free.o src/lib66/tree/tree_seed_get_group_permissions.o src/lib66/tree/tree_seed_get_key.o src/lib66/tree/tree_seed_isvalid.o src/lib66/tree/tree_seed_parse_file.o src/lib66/tree/tree_seed_resolve_path.o src/lib66/tree/tree_seed_setseed.o src/lib66/tree/tree_sethome.o src/lib66/tree/tree_setname.o src/lib66/tree/tree_switch_current.o src/lib66/utils/get_userhome.o src/lib66/utils/module_in_cmdline.o src/lib66/utils/module_path.o src/lib66/utils/module_search_service.o src/lib66/utils/name_isvalid.o src/lib66/utils/read_svfile.o src/lib66/utils/set_livedir.o src/lib66/utils/set_livescan.o src/lib66/utils/set_livestate.o src/lib66/utils/set_ownerhome.o src/lib66/utils/set_ownersysdir.o src/lib66/utils/yourgid.o src/lib66/utils/youruid.o src/lib66/write/write_classic.o src/lib66/write/write_common.o src/lib66/write/write_environ.o src/lib66/write/write_execute_scripts.o src/lib66/write/write_logger.o src/lib66/write/write_oneshot.o src/lib66/write/write_service.o src/lib66/write/write_uint.o else -lib66.a.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_main.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo +lib66.a.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_boot.lo src/lib66/exec/ssexec_reconfigure.lo src/lib66/exec/ssexec_reload.lo src/lib66/exec/ssexec_restart.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_inresolve.lo src/lib66/exec/ssexec_inservice.lo src/lib66/exec/ssexec_instate.lo src/lib66/exec/ssexec_intree.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_send_wait.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo endif lib66.so.xyzzy: EXTRA_LIBS := -loblibs -lskarnet -ls6 -lexecline -lib66.so.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_main.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo +lib66.so.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_boot.lo src/lib66/exec/ssexec_reconfigure.lo src/lib66/exec/ssexec_reload.lo src/lib66/exec/ssexec_restart.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_inresolve.lo src/lib66/exec/ssexec_inservice.lo src/lib66/exec/ssexec_instate.lo src/lib66/exec/ssexec_intree.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_send_wait.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo diff --git a/package/modes b/package/modes index 021267b7..5e81cba8 100644 --- a/package/modes +++ b/package/modes @@ -1,20 +1,4 @@ -66-scandir 0755 -66-scanctl 0755 -66-init 0755 -66-tree 0755 -66-enable 0755 -66-disable 0755 -66-parse 0755 -66-start 0755 -66-stop 0755 -66-svctl 0755 -66-all 0755 -66-intree 0755 -66-inresolve 0755 -66-inservice 0755 -66-instate 0755 -66-env 0755 -66-boot 0755 +66 0755 66-shutdown 0755 66-shutdownd 0755 66-hpr 0755 diff --git a/package/targets.mak b/package/targets.mak index 0b50c65d..a279c2a4 100644 --- a/package/targets.mak +++ b/package/targets.mak @@ -1,21 +1,5 @@ BIN_TARGETS := \ -66-scandir \ -66-scanctl \ -66-init \ -66-tree \ -66-enable \ -66-disable \ -66-parse \ -66-start \ -66-stop \ -66-svctl \ -66-all \ -66-intree \ -66-inresolve \ -66-inservice \ -66-instate \ -66-env \ -66-boot \ +66 \ 66-shutdown \ 66-shutdownd \ 66-hpr \ diff --git a/src/66/66-all.c b/src/66/66-all.c deleted file mode 100644 index 24828dbc..00000000 --- a/src/66/66-all.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 66-all.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-all" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_all ; - info.usage = usage_all ; - - /** 66-all supports to not define a default tree to start/stop, - * but ssexec_main do not support it. The tree_sethome() function - * will complain if a current tree is not define. - * So, ask to not set it. */ - - info.skip_opt_tree = 1 ; - - return ssexec_main(argc,argv,envp,&ssexec_all,&info) ; -} diff --git a/src/66/66-disable.c b/src/66/66-disable.c deleted file mode 100644 index d5d50c9e..00000000 --- a/src/66/66-disable.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-disable.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-disable" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_disable ; - info.usage = usage_disable ; - - return ssexec_main(argc,argv,envp,&ssexec_disable,&info) ; -} - - diff --git a/src/66/66-enable.c b/src/66/66-enable.c deleted file mode 100644 index cf2d0073..00000000 --- a/src/66/66-enable.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 66-enable.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-enable" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_enable ; - info.usage = usage_enable ; - - /** The tree can be define by the frontend service file - * with the field @intree. So, avoid to crash at call of - * the tree_sethome() function. */ - info.skip_opt_tree = 1 ; - - return ssexec_main(argc,argv,envp,&ssexec_enable,&info) ; -} - - diff --git a/src/66/66-env.c b/src/66/66-env.c deleted file mode 100644 index c37a7940..00000000 --- a/src/66/66-env.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-env.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-env" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_env ; - info.usage = usage_env ; - - return ssexec_main(argc,argv,envp,&ssexec_env,&info) ; -} - - diff --git a/src/66/66-init.c b/src/66/66-init.c deleted file mode 100644 index 5d81b16f..00000000 --- a/src/66/66-init.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-init.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-init" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_init ; - info.usage = usage_init ; - - return ssexec_main(argc,argv,envp,&ssexec_init,&info) ; -} - - diff --git a/src/66/66-parse.c b/src/66/66-parse.c deleted file mode 100644 index 2fd55ae2..00000000 --- a/src/66/66-parse.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 66-parse.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-parse" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_parse ; - info.usage = usage_parse ; - - info.skip_opt_tree = 1 ; - - return ssexec_main(argc, argv, envp, &ssexec_parse, &info) ; -} - - - - - - - - - - - - - - - - - - diff --git a/src/66/66-start.c b/src/66/66-start.c deleted file mode 100644 index 66b8f073..00000000 --- a/src/66/66-start.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-start.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-start" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_start ; - info.usage = usage_start ; - - return ssexec_main(argc,argv,envp,&ssexec_start,&info) ; -} - - diff --git a/src/66/66-stop.c b/src/66/66-stop.c deleted file mode 100644 index ff391e8f..00000000 --- a/src/66/66-stop.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-stop.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-stop" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_stop ; - info.usage = usage_stop ; - - return ssexec_main(argc,argv,envp,&ssexec_stop,&info) ; -} - - diff --git a/src/66/66-svctl.c b/src/66/66-svctl.c deleted file mode 100644 index 17e12819..00000000 --- a/src/66/66-svctl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-svctl.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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-svctl" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_svctl ; - info.usage = usage_svctl ; - - return ssexec_main(argc,argv,envp,&ssexec_svctl,&info) ; -} - - diff --git a/src/66/66-tree.c b/src/66/66-tree.c deleted file mode 100644 index 4b7d9867..00000000 --- a/src/66/66-tree.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 66-tree.c - * - * Copyright (c) 2018-2021-2019 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 <oblibs/log.h> - -#include <66/ssexec.h> - -int main(int argc, char const *const *argv,char const *const *envp) -{ - PROG = "66-tree" ; - - ssexec_t info = SSEXEC_ZERO ; - - info.prog = PROG ; - info.help = help_tree ; - info.usage = usage_tree ; - - info.skip_opt_tree = 1 ; - - return ssexec_main(argc,argv,envp,&ssexec_tree,&info) ; -} diff --git a/src/66/66.c b/src/66/66.c new file mode 100644 index 00000000..aba41001 --- /dev/null +++ b/src/66/66.c @@ -0,0 +1,521 @@ +/* + * 66.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 <string.h> +#include <unistd.h>//getuid, isatty + +#include <oblibs/log.h> +#include <oblibs/string.h> + +#include <skalibs/sgetopt.h> +#include <skalibs/types.h> + +#include <66/ssexec.h> +#include <66/utils.h> +#include <66/sanitize.h> +#include <66/tree.h> + +static inline void info_help (char const *help,char const *usage) +{ + log_flow() ; + + DEFAULT_MSG = 0 ; + + log_info(usage,"\n", help) ; +} + +void set_treeinfo(ssexec_t *info) +{ + log_flow() ; + + int r = tree_sethome(info) ; + if (r == -3) + log_dieu(LOG_EXIT_USER, "find the current tree. You must use the -t options") ; + if (r == -2) + log_dieu(LOG_EXIT_USER, "set the tree name") ; + if (r == -1) + log_dieu(LOG_EXIT_USER, "parse seed file") ; + if (!r) + log_dieusys(LOG_EXIT_SYS, "find tree: ", info->treename.s) ; + + if (!tree_get_permissions(info->tree.s, info->owner)) + log_die(LOG_EXIT_USER,"You're not allowed to use the tree: ",info->tree.s) ; + + info->treeallow = 1 ; +} + +static void set_info(ssexec_t *info) +{ + log_flow() ; + + int r ; + + if (!info->skip_opt_tree) + set_treeinfo(info) ; + + r = set_livedir(&info->live) ; + if (!r) + log_die_nomem("stralloc") ; + if(r < 0) + log_die(LOG_EXIT_SYS, "live: ", info->live.s, " must be an absolute path") ; + + if (!stralloc_copy(&info->scandir, &info->live)) + log_die_nomem("stralloc") ; + + r = set_livescan(&info->scandir, info->owner) ; + if (!r) + log_die_nomem("stralloc") ; + if(r < 0) + log_die(LOG_EXIT_SYS, "scandir: ", info->scandir.s, " must be an absolute path") ; +} + +int main(int argc, char const *const *argv) +{ + + if (!argv[1]) { + PROG = "66" ; + log_usage(usage_66) ; + } + + int r, n = 0, i = 0 ; + /** 30 options should be large enough */ + char opts[30] ; + char const *main = "hv:l:t:T:z" ; + char str[UINT_FMT] ; + char const *nargv[argc + 1] ; + + ssexec_t info = SSEXEC_ZERO ; + ssexec_func_t_ref func = 0 ; + log_color = &log_color_disable ; + + info.owner = getuid() ; + info.ownerlen = uid_fmt(info.ownerstr, info.owner) ; + info.ownerstr[info.ownerlen] = 0 ; + + if (!set_ownersysdir(&info.base, info.owner)) + log_dieusys(LOG_EXIT_SYS, "set owner directory") ; + + + if (!strcmp(argv[1], "boot")) { + + PROG = "boot" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_boot ; + info.usage = usage_boot ; + func = &ssexec_boot ; + + //sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_BOOT) ; + + } else if (!strcmp(argv[1], "enable")) { + + PROG = "enable" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_enable ; + info.usage = usage_enable ; + func = &ssexec_enable ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_ENABLE) ; + + } else if (!strcmp(argv[1], "disable")) { + + PROG = "disable" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_disable ; + info.usage = usage_disable ; + func = &ssexec_disable ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_DISABLE) ; + + } else if (!strcmp(argv[1], "start")) { + + PROG = "start" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_start ; + info.usage = usage_start ; + func = &ssexec_start ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_START) ; + + } else if (!strcmp(argv[1], "stop")) { + + PROG = "stop" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_stop ; + info.usage = usage_stop ; + func = &ssexec_stop ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_STOP) ; + + } else if (!strcmp(argv[1], "stop")) { + + PROG = "stop" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_stop ; + info.usage = usage_stop ; + func = &ssexec_stop ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_STOP) ; + + } else if (!strcmp(argv[1], "all")) { + + PROG = "all" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_all ; + info.usage = usage_all ; + func = &ssexec_all ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_ALL) ; + + } else if (!strcmp(argv[1], "env")) { + + PROG = "env" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_env ; + info.usage = usage_env ; + func = &ssexec_env ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_ENV) ; + + } else if (!strcmp(argv[1], "init")) { + + PROG = "init" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_init ; + info.usage = usage_init ; + func = &ssexec_init ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_INIT) ; + + } else if (!strcmp(argv[1], "parse")) { + + PROG = "parse" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_parse ; + info.usage = usage_parse ; + func = &ssexec_parse ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_PARSE) ; + + } else if (!strcmp(argv[1], "reconfigure")) { + + PROG = "reconfigure" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_reconfigure ; + info.usage = usage_reconfigure ; + func = &ssexec_reconfigure ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_SUBSTART) ; + + } else if (!strcmp(argv[1], "reload")) { + + PROG = "reload" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_reload ; + info.usage = usage_reload ; + func = &ssexec_reload ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_SUBSTART) ; + + } else if (!strcmp(argv[1], "restart")) { + + PROG = "restart" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_restart ; + info.usage = usage_restart ; + func = &ssexec_restart ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_SUBSTART) ; + + } else if (!strcmp(argv[1], "unsupervise")) { + + PROG = "stop" ; + nargv[n++] = PROG ; + nargv[n++] = "-u" ; + info.prog = PROG ; + info.help = help_stop ; + info.usage = usage_stop ; + func = &ssexec_stop ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_STOP) ; + + } else if (!strcmp(argv[1], "svctl")) { + + PROG = "svctl" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_svctl ; + info.usage = usage_svctl ; + func = &ssexec_svctl ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_SVCTL) ; + + } else if (!strcmp(argv[1], "tree")) { + + PROG = "tree" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_tree ; + info.usage = usage_tree ; + func = &ssexec_tree ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_TREE) ; + + } else if (!strcmp(argv[1], "inresolve")) { + + PROG = "inresolve" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_inresolve ; + info.usage = usage_inresolve ; + func = &ssexec_inresolve ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_INRESOLVE) ; + + } else if (!strcmp(argv[1], "instate")) { + + PROG = "instate" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_instate ; + info.usage = usage_instate ; + func = &ssexec_instate ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_INSTATE) ; + + } else if (!strcmp(argv[1], "intree")) { + + PROG = "intree" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_intree ; + info.usage = usage_intree ; + func = &ssexec_intree ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_INTREE) ; + + } else if (!strcmp(argv[1], "inservice")) { + + PROG = "inservice" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_inservice ; + info.usage = usage_inservice ; + func = &ssexec_inservice ; + + sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_INSERVICE) ; + + } else if (!strcmp(argv[1], "scanctl")) { + + PROG = "scanctl" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_scanctl ; + info.usage = usage_scanctl ; + func = &ssexec_scanctl ; + + //sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_SCANCTL) ; + + } else if (!strcmp(argv[1], "scandir")) { + + PROG = "scandir" ; + nargv[n++] = PROG ; + info.prog = PROG ; + info.help = help_scandir ; + info.usage = usage_scandir ; + func = &ssexec_scandir ; + + //sanitize_system(&info) ; + + auto_strings(opts, main, OPTS_SCANDIR) ; + + } else { + + log_usage(usage_66) ; + } + + argc-- ; + argv++ ; + + { + subgetopt l = SUBGETOPT_ZERO ; + + int f = 0 ; + for (;;) + { + int opt = subgetopt_r(argc, argv, opts, &l) ; + + if (opt == -1) break ; + switch (opt) + { + case 'h' : + + info_help(info.help, info.usage) ; + return 0 ; + + case 'v' : + + if (!uint0_scan(l.arg, &VERBOSITY)) + log_usage(info.usage) ; + info.opt_verbo = 1 ; + break ; + + case 'l' : + + str[uint_fmt(str, SS_MAX_PATH)] = 0 ; + + if (strlen(l.arg) > SS_MAX_PATH) + log_die(LOG_EXIT_USER, "live path is too long -- it can not exceed ", str) ; + + if (!auto_stra(&info.live, l.arg)) + log_die_nomem("stralloc") ; + + info.opt_live = 1 ; + break ; + + case 't' : + + str[uint_fmt(str, SS_MAX_TREENAME)] = 0 ; + + if (strlen(l.arg) > SS_MAX_TREENAME) + log_die(LOG_EXIT_USER, "tree name is too long -- it can not exceed ", str) ; + + if (!auto_stra(&info.treename, l.arg)) + log_die_nomem("stralloc") ; + + info.opt_tree = 1 ; + info.skip_opt_tree = 0 ; + break ; + + case 'T' : + + if (!uint0_scan(l.arg, &info.timeout)) + log_usage(info.usage) ; + info.opt_timeout = 1 ; + break ; + + case 'z' : + + log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; + info.opt_color = 1 ; + break ; + + default : + + for (i = 0 ; i < n ; i++) { + + if (!argv[l.ind]) + log_usage(info.usage) ; + + if (l.arg) { + + if (!strcmp(nargv[i],argv[l.ind - 2]) || !strcmp(nargv[i],l.arg)) + f = 1 ; + + } else { + + if (!strcmp(nargv[i],argv[l.ind])) + f = 1 ; + } + } + + if (!f) { + + if (l.arg) { + // distinction between e.g -enano and -e nano + if (argv[l.ind - 1][0] != '-') + nargv[n++] = argv[l.ind - 2] ; + + nargv[n++] = argv[l.ind - 1] ; + + } else { + + nargv[n++] = argv[l.ind] ; + } + } + f = 0 ; + break ; + } + } + argc -= l.ind ; argv += l.ind ; + } + + set_info(&info) ; + + for (i = 0 ; i < argc ; i++ , argv++) + nargv[n++] = *argv ; + + nargv[n] = 0 ; + + r = (*func)(n, nargv, &info) ; + + ssexec_free(&info) ; + + return r ; + +} diff --git a/src/66/deps-exe/66-all b/src/66/deps-exe/66 similarity index 100% rename from src/66/deps-exe/66-all rename to src/66/deps-exe/66 diff --git a/src/66/deps-exe/66-boot b/src/66/deps-exe/66-boot deleted file mode 100644 index bc799f33..00000000 --- a/src/66/deps-exe/66-boot +++ /dev/null @@ -1,5 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet -${SPAWN_LIB} diff --git a/src/66/deps-exe/66-disable b/src/66/deps-exe/66-disable deleted file mode 100644 index 390fc3b5..00000000 --- a/src/66/deps-exe/66-disable +++ /dev/null @@ -1,5 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet - diff --git a/src/66/deps-exe/66-enable b/src/66/deps-exe/66-enable deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-enable +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-env b/src/66/deps-exe/66-env deleted file mode 100644 index 70626b64..00000000 --- a/src/66/deps-exe/66-env +++ /dev/null @@ -1,6 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet - - diff --git a/src/66/deps-exe/66-info b/src/66/deps-exe/66-info deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-info +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-init b/src/66/deps-exe/66-init deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-init +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-inresolve b/src/66/deps-exe/66-inresolve deleted file mode 100644 index 9c58365f..00000000 --- a/src/66/deps-exe/66-inresolve +++ /dev/null @@ -1,3 +0,0 @@ -${LIB66} --loblibs --lskarnet diff --git a/src/66/deps-exe/66-inservice b/src/66/deps-exe/66-inservice deleted file mode 100644 index bc799f33..00000000 --- a/src/66/deps-exe/66-inservice +++ /dev/null @@ -1,5 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet -${SPAWN_LIB} diff --git a/src/66/deps-exe/66-instate b/src/66/deps-exe/66-instate deleted file mode 100644 index 9c58365f..00000000 --- a/src/66/deps-exe/66-instate +++ /dev/null @@ -1,3 +0,0 @@ -${LIB66} --loblibs --lskarnet diff --git a/src/66/deps-exe/66-intree b/src/66/deps-exe/66-intree deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-intree +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-parse b/src/66/deps-exe/66-parse deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-parse +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-start b/src/66/deps-exe/66-start deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-start +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-stop b/src/66/deps-exe/66-stop deleted file mode 100644 index 306db624..00000000 --- a/src/66/deps-exe/66-stop +++ /dev/null @@ -1,4 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet diff --git a/src/66/deps-exe/66-svctl b/src/66/deps-exe/66-svctl deleted file mode 100644 index ec930b04..00000000 --- a/src/66/deps-exe/66-svctl +++ /dev/null @@ -1,5 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet -${SYSCLOCK_LIB} diff --git a/src/66/deps-exe/66-tree b/src/66/deps-exe/66-tree deleted file mode 100644 index bc799f33..00000000 --- a/src/66/deps-exe/66-tree +++ /dev/null @@ -1,5 +0,0 @@ -${LIB66} --ls6 --loblibs --lskarnet -${SPAWN_LIB} diff --git a/src/include/66/ssexec.h b/src/include/66/ssexec.h index 666c3e57..350bc867 100644 --- a/src/include/66/ssexec.h +++ b/src/include/66/ssexec.h @@ -111,6 +111,16 @@ extern ssexec_func_t ssexec_svctl ; extern ssexec_func_t ssexec_env ; extern ssexec_func_t ssexec_all ; extern ssexec_func_t ssexec_tree ; +extern ssexec_func_t ssexec_reconfigure ; +extern ssexec_func_t ssexec_reload ; +extern ssexec_func_t ssexec_restart ; +extern ssexec_func_t ssexec_inresolve ; +extern ssexec_func_t ssexec_instate ; +extern ssexec_func_t ssexec_intree ; +extern ssexec_func_t ssexec_inservice ; +extern ssexec_func_t ssexec_boot ; +extern ssexec_func_t ssexec_scanctl ; +extern ssexec_func_t ssexec_scandir ; extern char const *usage_parse ; extern char const *help_parse ; @@ -132,18 +142,43 @@ extern char const *usage_all ; extern char const *help_all ; extern char const *usage_tree ; extern char const *help_tree ; - +extern char const *usage_reconfigure ; +extern char const *help_reconfigure ; +extern char const *usage_reload ; +extern char const *help_reload ; +extern char const *usage_restart ; +extern char const *help_restart ; +extern char const *usage_unsupervise ; +extern char const *help_unsupervise ; +extern char const *usage_inresolve ; +extern char const *help_inresolve ; +extern char const *usage_instate ; +extern char const *help_instate ; +extern char const *usage_intree ; +extern char const *help_intree ; +extern char const *usage_inservice ; +extern char const *help_inservice ; +extern char const *usage_boot ; +extern char const *help_boot ; +extern char const *usage_scanctl ; +extern char const *help_scanctl ; +extern char const *usage_scandir ; +extern char const *help_scandir ; +extern char const *usage_66 ; + +#define OPTS_SUBSTART "P" +#define OPTS_SUBSTART_LEN (sizeof OPTS_SUBSTART - 1) #define OPTS_PARSE "fFcmCI" #define OPTS_PARSE_LEN (sizeof OPTS_PARSE - 1) -#define OPTS_INIT "o:" +#define OPTS_INIT "" #define OPTS_INIT_LEN (sizeof OPTS_INIT - 1) #define OPTS_ENABLE "fFSI" #define OPTS_ENABLE_LEN (sizeof OPTS_ENABLE - 1) #define OPTS_DISABLE "SFR" #define OPTS_DISABLE_LEN (sizeof OPTS_DISABLE - 1) -#define OPTS_START "rR" +#define OPTS_START "P" #define OPTS_START_LEN (sizeof OPTS_START - 1) -#define OPTS_STOP "uXK" +#define OPTS_STOP "P" #define OPTS_STOP_LEN (sizeof OPTS_STOP - 1) #define OPTS_SVCTL "abqhkti12pcyroduxOw:P" #define OPTS_SVCTL_LEN (sizeof OPTS_SVCTL - 1) @@ -153,9 +188,21 @@ extern char const *help_tree ; #define OPTS_ALL_LEN (sizeof OPTS_ALL - 1) #define OPTS_TREE "na:d:cS:EDRC:o:" #define OPTS_TREE_LEN (sizeof OPTS_TREE - 1) +#define OPTS_INRESOLVE "" +#define OPTS_INRESOLVE_LEN (sizeof OPTS_INRESOLVE - 1) +#define OPTS_INSTATE "" +#define OPTS_INSTATE_LEN (sizeof OPTS_INSTATE - 1) +#define OPTS_INTREE "no:grd:l:" +#define OPTS_INTREE_LEN (sizeof OPTS_INTREE - 1) +#define OPTS_INSERVICE "no:grd:t:p:" +#define OPTS_INSERVICE_LEN (sizeof OPTS_INSERVICE - 1) +#define OPTS_BOOT "ms:e:d:b:l:" +#define OPTS_BOOT_LEN (sizeof OPTS_BOOT - 1) +#define OPTS_SCANCTL "o:d:t:e:" +#define OPTS_SCANCTL_LEN (sizeof OPTS_SCANCTL - 1) +#define OPTS_SCANDIR "bl:s:o:L:cB" +#define OPTS_SCANDIR_LEN (sizeof OPTS_SCANDIR - 1) + -extern int ssexec_main(int argc, char const *const *argv, char const *const *envp,ssexec_func_t *func,ssexec_t *info) ; -extern void ssexec_set_info(ssexec_t *info) ; -extern int ssexec_set_treeinfo(ssexec_t *info) ; #endif diff --git a/src/lib66/exec/deps-lib/deps b/src/lib66/exec/deps-lib/deps index ca1bded6..10580b4f 100644 --- a/src/lib66/exec/deps-lib/deps +++ b/src/lib66/exec/deps-lib/deps @@ -1,12 +1,21 @@ ssexec_all.o +ssexec_boot.o ssexec_disable.o ssexec_enable.o ssexec_env.o ssexec_free.o ssexec_help.o ssexec_init.o -ssexec_main.o +ssexec_inresolve.o +ssexec_inservice.o +ssexec_instate.o +ssexec_intree.o ssexec_parse.o +ssexec_reconfigure.o +ssexec_reload.o +ssexec_restart.o +ssexec_scanctl.o +ssexec_scandir.o ssexec_start.o ssexec_stop.o ssexec_svctl.o diff --git a/src/66/66-boot.c b/src/lib66/exec/ssexec_boot.c similarity index 78% rename from src/66/66-boot.c rename to src/lib66/exec/ssexec_boot.c index 3d97fd0e..d25a3306 100644 --- a/src/66/66-boot.c +++ b/src/lib66/exec/ssexec_boot.c @@ -1,5 +1,5 @@ /* - * 66-boot.c + * ssexec_boot.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -29,10 +29,10 @@ #include <oblibs/log.h> #include <oblibs/files.h> #include <oblibs/string.h> -#include <oblibs/obgetopt.h> #include <oblibs/environ.h> #include <oblibs/sastr.h> +#include <skalibs/sgetopt.h> #include <skalibs/djbunix.h> #include <skalibs/stralloc.h> #include <skalibs/types.h> @@ -40,6 +40,7 @@ #include <66/config.h> #include <66/constants.h> +#include <66/ssexec.h> static mode_t mask = SS_BOOT_UMASK ; static unsigned int rescan = SS_BOOT_RESCAN ; @@ -57,22 +58,19 @@ static char const *envdir = 0 ; static char const *fifo = 0 ; static char const *log_user = SS_LOGGER_RUNNER ; static char const *cver = 0 ; -static char tpath[MAXENV + 1] ; -static char trcinit[MAXENV + 1] ; -static char trcinit_container[MAXENV + 1] ; -static char tlive[MAXENV + 1] ; -static char ttree[MAXENV + 1] ; -static char confile[MAXENV + 1] ; +static char tpath[SS_MAX_PATH_LEN + 1] ; +static char trcinit[SS_MAX_PATH_LEN + 1] ; +static char trcinit_container[SS_MAX_PATH_LEN + 1] ; +static char tlive[SS_MAX_PATH_LEN + 1] ; +static char ttree[SS_MAX_PATH_LEN + 1] ; +static char confile[SS_MAX_PATH_LEN + 1 + SS_BOOT_CONF_LEN + 1] ; static char const *const *genv = 0 ; static int fdin ; -static char const *proc_cmdline="/proc/cmdline" ; static stralloc sacmdline = STRALLOC_ZERO ; static int notifpipe[2] ; #define MAXBUF 1024*64*2 -#define USAGE "66-boot [ -h ] [ -z ] [ -m ] [ -s skel ] [ -l log_user ] [ -e environment ] [ -d dev ] [ -b banner ]" - static void sulogin(char const *msg,char const *arg) { static char const *const newarg[2] = { SS_EXTBINPREFIX "sulogin" , 0 } ; @@ -84,81 +82,13 @@ static void sulogin(char const *msg,char const *arg) if (*msg) log_warnu(msg,arg) ; pid = child_spawn0(newarg[0],newarg,genv) ; if (waitpid_nointr(pid,&wstat, 0) < 0) - log_dieusys(LOG_EXIT_SYS,"wait for sulogin -- you are on your own") ; + log_dieusys(LOG_EXIT_SYS,"wait for sulogin -- you are on your own") ; fdin=dup(0) ; if (fdin == -1) log_dieu(LOG_EXIT_SYS,"duplicate stdin -- you are on your own") ; close(0) ; if (open("/dev/null",O_WRONLY)) log_dieu(LOG_EXIT_SYS,"open /dev/null -- you are on your own") ; } -static inline void info_help (void) -{ - DEFAULT_MSG = 0 ; - - static char const *help = -"\n" -"options :\n" -" -h: print this help\n" -" -z: use color\n" -" -m: mount parent live directory\n" -" -s: skeleton directory\n" -" -l: run catch-all logger as log_user user\n" -" -e: environment directory or file\n" -" -d: dev directory\n" -" -b: banner to display\n" -; - - log_info(USAGE,"\n",help) ; -} - -static int read_line(stralloc *dst, char const *line) -{ - log_flow() ; - - char b[MAXBUF] ; - int fd ; - unsigned int n = 0, m = MAXBUF ; - - fd = open(line, O_RDONLY) ; - if (fd == -1) return 0 ; - - for(;;) - { - ssize_t r = read(fd,b+n,m-n); - if (r == -1) - { - if (errno == EINTR) continue ; - break ; - } - n += r ; - // buffer is full - if (n == m) - { - --n ; - break ; - } - // end of file - if (r == 0) break ; - } - close(fd) ; - - if(n) - { - int i = n ; - // remove trailing zeroes - while (i && b[i-1] == '\0') --i ; - while (i--) - if (b[i] == '\n' || b[i] == '\0') b[i] = ' ' ; - - if (b[n-1] == ' ') b[n-1] = '\0' ; - } - b[n] = '\0'; - - if (!stralloc_cats(dst,b) || - !stralloc_0(dst)) sulogin("close stralloc",dst->s) ; - return n ; -} - static int get_value(stralloc *val,char const *key) { if (!environ_get_val_of_key(val,key)) return 0 ; @@ -204,51 +134,46 @@ static void parse_conf(void) int r ; unsigned int j = 0 ; uint8_t empty = 0 ; + size_t filesize = 0 ; char u[UINT_FMT] ; + char *gvalue = 0 ; stralloc src = STRALLOC_ZERO ; - stralloc cmdline = STRALLOC_ZERO ; stralloc val = STRALLOC_ZERO ; - if (skel[0] != '/') sulogin("skeleton directory must be an aboslute path: ",skel) ; - size_t skelen = strlen(skel) ; - memcpy(confile,skel,skelen) ; - confile[skelen] = '/' ; - memcpy(confile + skelen + 1, SS_BOOT_CONF, SS_BOOT_CONF_LEN) ; - confile[skelen + 1 + SS_BOOT_CONF_LEN] = 0 ; - size_t filesize=file_get_size(confile) ; + + if (skel[0] != '/') + sulogin("skeleton directory must be an aboslute path: ",skel) ; + + auto_strings(confile, skel, "/", SS_BOOT_CONF) ; + + filesize = file_get_size(confile) ; /** skeleton file */ - r = openreadfileclose(confile,&src,filesize) ; - if(!r) sulogin("open configuration file: ",confile) ; - if (!stralloc_0(&src)) sulogin("append stralloc of file: ",confile) ; - - /** /proc/cmdline */ - if (!read_line(&cmdline,proc_cmdline)) { - /** we don't want to die here */ - log_warnu("read: ",proc_cmdline) ; - } - else if (!sastr_split_element_in_nline(&cmdline)) { - log_warnu("split: ",proc_cmdline) ; - cmdline.len = 0 ; - } - for (char const *const *p = valid;*p;p++,j++) + r = openreadfileclose(confile, &src, filesize) ; + if(!r) + sulogin("open configuration file: ",confile) ; + if (!stralloc_0(&src)) + sulogin("append stralloc of file: ",confile) ; + + for (char const *const *p = valid; *p; p++, j++) { empty = 0 ; - /** try first to read from /proc/cmdline. + /** try first to read from kernel environment. * If the key is not found, try to read the skeleton file. * Finally keep the default value if we cannot get a correct * key=value pair */ - if (cmdline.len > 0) { - if (!stralloc_copy(&val,&cmdline)) sulogin("copy stralloc of file: ",proc_cmdline) ; + gvalue = getenv(*p) ; + if (gvalue) { - } - else if (!stralloc_copy(&val,&src)) sulogin("copy stralloc of file: ",confile) ; + if (!auto_stra(&val, *p, "=", gvalue)) + sulogin("copy value of key: ", *p) ; + + } else { + + if (!stralloc_copy(&val, &src)) + sulogin("copy stralloc of file: ",confile) ; + + if (!get_value(&val,*p)) + empty = 1 ; - if (!get_value(&val,*p)) - { - if (cmdline.len > 0) { - if (!stralloc_copy(&val,&src)) sulogin("copy stralloc of file: ",confile) ; - if (!get_value(&val,*p)) empty = 1 ; - } - else empty = 1 ; } switch (j) @@ -368,7 +293,6 @@ static void parse_conf(void) if (!sastr_split_string_in_nline(&sacmdline)) sulogin("split string: ",sacmdline.s) ; stralloc_free(&val) ; - stralloc_free(&cmdline) ; stralloc_free(&src) ; } @@ -475,33 +399,35 @@ static inline void run_stage2 (char const *const *envp, size_t envlen, char cons xmexec_fm(newargv, envp, envlen, t, tlen) ; } -static inline void run_cmdline(char const *const *newargv, char const *const *envp, char const *msg,char const *arg) +static inline void make_cmdline(char const *prog,char const **add,int len,char const *msg,char const *arg,char const *const *envp) { log_flow() ; pid_t pid ; int wstat ; - pid = child_spawn0(newargv[0],newargv,envp) ; - if (waitpid_nointr(pid,&wstat, 0) < 0) - sulogin("wait for: ",newargv[0]) ; - if (wstat) sulogin(msg,arg) ; -} - -static inline void make_cmdline(char const *prog,char const **add,int len,char const *msg,char const *arg,char const *const *envp) -{ - log_flow() ; - - int m = 6 + len, i = 0, n = 0 ; + int m = 7 + len, i = 0, n = 0 ; char const *newargv[m] ; + + newargv[n++] = "66" ; newargv[n++] = prog ; newargv[n++] = "-v" ; newargv[n++] = cver ; newargv[n++] = "-l" ; newargv[n++] = live ; + for (;i<len;i++) newargv[n++] = add[i] ; + newargv[n] = 0 ; - run_cmdline(newargv,envp,msg,arg) ; + + pid = child_spawn0(newargv[0], newargv, envp) ; + + if (waitpid_nointr(pid, &wstat, 0) < 0) + sulogin("wait for: ", newargv[0]) ; + + if (wstat) + sulogin(msg, arg) ; + } static void cad(void) @@ -515,7 +441,7 @@ static void cad(void) int fd ; fd = open("/dev/tty0", O_RDONLY | O_NOCTTY) ; if (fd < 0) { - log_warnusys("open /dev/", "tty0 (kbrequest will not be handled)") ; + log_warnusys("open /dev/tty0 (kbrequest will not be handled)") ; } else { @@ -532,7 +458,7 @@ static void cad(void) } -int main(int argc, char const *const *argv,char const *const *envp) +int ssexec_boot(int argc, char const *const *argv, ssexec_t *info) { VERBOSITY = 0 ; unsigned int r , tmpfs = 0, opened = 0 ; @@ -541,30 +467,25 @@ int main(int argc, char const *const *argv,char const *const *envp) char verbo[UINT_FMT] ; cver = verbo ; stralloc envmodifs = STRALLOC_ZERO ; - genv = envp ; + genv = (char const *const *)environ ; - log_color = &log_color_disable ; - - PROG = "66-boot" ; { subgetopt l = SUBGETOPT_ZERO ; for (;;) { - int opt = getopt_args(argc,argv, ">hzms:e:d:b:l:", &l) ; + int opt = subgetopt_r(argc, argv, OPTS_BOOT, &l) ; if (opt == -1) break ; - if (opt == -2) sulogin("options must be set first","") ; + switch (opt) { - case 'h' : info_help(); return 0 ; - case 'z' : log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ; case 'm' : tmpfs = 1 ; break ; case 's' : skel = l.arg ; break ; case 'e' : envdir = l.arg ; break ; case 'd' : slashdev = l.arg ; break ; case 'b' : banner = l.arg ; break ; case 'l' : log_user = l.arg ; break ; - default : log_usage(USAGE) ; + default : log_usage(usage_boot) ; } } argc -= l.ind ; argv += l.ind ; @@ -684,13 +605,14 @@ int main(int argc, char const *const *argv,char const *const *envp) t[m++] = log_user ; t[m++] = "create" ; log_info("Create live scandir at: ",live) ; - make_cmdline(SS_EXTBINPREFIX "66-scandir",t,nargc,"create live scandir at: ",live,envp) ; + + make_cmdline("scandir", t, nargc, "create live scandir at: ", live, genv) ; } /** initiate earlier service */ { - char const *t[] = { "-t",tree,"classic" } ; + char const *t[] = { tree } ; log_info("Initiate earlier service of tree: ",tree) ; - make_cmdline(SS_EXTBINPREFIX "66-init",t,3,"initiate earlier service of tree: ",tree,envp) ; + make_cmdline("init", t, 1, "initiate earlier service of tree: ", tree, genv) ; } if (envdir) { @@ -716,8 +638,9 @@ int main(int argc, char const *const *argv,char const *const *envp) char fmtfd[2 + UINT_FMT] = "-" ; size_t m = 0 ; - static char const *newargv[7] ; - newargv[m++] = SS_EXTBINPREFIX "66-scanctl" ; + static char const *newargv[8] ; + newargv[m++] = "66" ; + newargv[m++] = "scanctl" ; newargv[m++] = "-v0" ; if (!catch_log) newargv[m++] = fmtfd ; diff --git a/src/lib66/exec/ssexec_help.c b/src/lib66/exec/ssexec_help.c index 8ad754b0..048534e6 100644 --- a/src/lib66/exec/ssexec_help.c +++ b/src/lib66/exec/ssexec_help.c @@ -14,43 +14,40 @@ #include <66/ssexec.h> -char const *usage_enable = "66-enable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -f|F ] [ -I ] [ -S ] service(s)" ; +char const *usage_parse = "66 parse [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] [ -f|F ] [ -I ] service" ; -char const *help_enable = +char const *help_parse = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" -" -l: live directory\n" -" -t: name of the tree to use\n" -" -f: force to overwrite the service(s)\n" -" -F: force to overwrite the service(s) and its dependencies\n" +" -f: force to overwrite existing destination\n" +" -F: also force to overwrite its dependencies\n" " -I: do not import modified configuration files from previous version\n" -" -S: enable and start the service\n" ; -char const *usage_dbctl = "66-dbctl [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -u | d | r ] service(s)" ; +char const *usage_enable = "66 enable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -f|F ] [ -I ] [ -S ] service(s)" ; -char const *help_dbctl = +char const *help_enable = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" -" -T: timeout\n" " -l: live directory\n" -" -t: tree to use\n" -" -u: bring up service in database of tree\n" -" -d: bring down service in database of tree\n" -" -r: reload service\n" +" -t: name of the tree to use\n" +" -f: force to overwrite the service(s)\n" +" -F: force to overwrite the service(s) and its dependencies\n" +" -I: do not import modified configuration files from previous version\n" +" -S: enable and start the service\n" ; -char const *usage_disable = "66-disable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -S ] [ -F ] [ -R ] service(s)" ; +char const *usage_disable = "66 disable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -S ] [ -F ] [ -R ] service(s)" ; char const *help_disable = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" @@ -61,38 +58,35 @@ char const *help_disable = " -R: disable the service and remove its configuration and logger files\n" ; -char const *usage_init = "66-init [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] classic|database|both" ; +char const *usage_init = "66 init [ -h ] [ -z ] [ -v verbosity ] [ -l live ] tree" ; char const *help_init = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" " -l: live directory\n" -" -t: name of the tree to use\n" ; -char const *usage_start = "66-start [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -r | R ] service(s)" ; +char const *usage_start = "66 start [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] service(s)" ; char const *help_start = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" " -l: live directory\n" " -t: tree to use\n" " -T: timeout\n" -" -r: reload the service(s)\n" -" -R: reload service(s) file(s) and the service(s) itself\n" ; -char const *usage_stop = "66-stop [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -u ] [ -X ] [ -K ] service(s)" ; +char const *usage_stop = "66 stop [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -u ] service(s)" ; char const *help_stop = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" @@ -100,34 +94,26 @@ char const *help_stop = " -T: timeout\n" " -t: tree to use\n" " -u: unsupervise service(s)\n" -" -X: bring down the service(s) and kill his supervisor\n" -" -K: kill the service(s) and keep it down\n" ; -char const *usage_svctl = "66-svctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -n death ] [ -u | d | r | K | X ] service(s)" ; +char const *usage_svctl = "66 svctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -wu | -wU | -wd | -wD | -wr | -wR ] [ -abqhkti12pcyoduxOr ] service(s)" ; char const *help_svctl = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" " -l: live directory\n" " -t: tree to use\n" " -T: service timeout\n" -" -n: number of death\n" -" -u: bring up the service(s)\n" -" -d: bring down the service(s)\n" -" -r: reload\n" -" -X: bring down the service(s) and the kill his supervisor\n" -" -K: kill the service(s) and keep it down\n" ; -char const *usage_env = "66-env [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] [ -c version ] [ -s version ] [ -V|L ] [ -r key=value ] [ -i src,dst ] [ -e editor ] service" ; +char const *usage_env = "66 env [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] [ -c version ] [ -s version ] [ -V|L ] [ -r key=value ] [ -i src,dst ] [ -e editor ] service" ; char const *help_env = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" @@ -141,11 +127,11 @@ char const *help_env = " -e: edit the file with editor\n" ; -char const *usage_all = "66-all [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -f ] up|down|unsupervise" ; +char const *usage_all = "66 all [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -f ] up|down|unsupervise" ; char const *help_all = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" @@ -155,11 +141,11 @@ char const *help_all = " -f: fork the process\n" ; -char const *usage_tree = "66-tree [ -h ] [ -z ] [ -v verbosity ] [ -c ] [ -o depends=:... ] [ -E|D ] [ -R ] tree" ; +char const *usage_tree = "66 tree [ -h ] [ -z ] [ -v verbosity ] [ -c ] [ -o depends=:... ] [ -E|D ] [ -R ] tree" ; char const *help_tree = "\n" -"options :\n" +"options:\n" " -h: print this help\n" " -z: use color\n" " -v: increase/decrease verbosity\n" @@ -180,3 +166,208 @@ char const *help_tree = " clone=: make a clone of tree\n" " noseed: do not use seed file to build the tree\n" ; + +char const *usage_tree = "66 treectl [ -h ] [ -z ] [ -v verbosity ] tree" ; + +char const *help_treectl = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +; + +char const *usage_reconfigure = "66 reconfigure [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ; + +char const *help_reconfigure = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -t: tree to use\n" +" -T: timeout\n" +" -P: do not propagate signal to its dependencies\n" +; + +char const *usage_reload = "66 reload [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ; + +char const *help_reload = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -t: tree to use\n" +" -T: timeout\n" +" -P: do not propagate signal to its dependencies\n" +; + +char const *usage_restart = "66 restart [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ; + +char const *help_restart = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -t: tree to use\n" +" -T: timeout\n" +" -P: do not propagate signal to its dependencies\n" +; + +char const *usage_unsupervise = "66 unsupervise [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ; + +char const *help_unsupervise = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -t: tree to use\n" +" -T: timeout\n" +" -P: do not propagate signal to its dependencies\n" +; + +char const *usage_inresolve = "66 inresolve [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] tree|service name" ; + +char const *help_inresolve = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -t: only search at the specified tree\n" +" tree: search for tree name\n" +" service: search for service name\n" +; + +char const *usage_instate = "66 instate [ -h ] [ -z ] [ -v verbosity ] service" ; + +char const *help_instate = +"\n" +"options:\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +; + +char const *usage_intree = "66 intree [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -n ] [ -o name,init,enabled,... ] [ -g ] [ -d depth ] [ -r ] tree" ; + +char const *help_intree = +"\n" +"options :\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -n: do not display the names of fields\n" +" -o: comma separated list of field to display\n" +" -g: displays the contents field as graph\n" +" -d: limit the depth of the contents field recursion\n" +" -r: reverse the contents field\n" +"\n" +"valid fields for -o options are:\n" +"\n" +" name: displays the name of the tree\n" +" current: displays a boolean value of the current state\n" +" enabled: displays a boolean value of the enable state\n" +" init: displays a boolean value of the initialization state\n" +" depends: displays the list of tree(s) started before\n" +" requiredby: displays the list of tree(s) started after\n" +" allowed: displays a list of allowed user to use the tree\n" +" symlinks: displays the target of tree's symlinks\n" +" contents: displays the contents of the tree\n" +; + +char const *usage_inservice = "66 inservice [ -h ] [ -z ] [ -v verbosity ] [ -n ] [ -o name,intree,status,... ] [ -g ] [ -d depth ] [ -r ] [ -t tree ] [ -p nline ] service" ; + +char const *help_inservice = +"\n" +"options :\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -n: do not display the field name\n" +" -o: comma separated list of field to display\n" +" -g: displays the contents field as graph\n" +" -d: limit the depth of the contents field recursion\n" +" -r: reverse the contents field\n" +" -t: only search service at the specified tree\n" +" -p: print n last lines of the log file\n" +"\n" +"valid fields for -o options are:\n" +"\n" +" name: displays the name\n" +" version: displays the version of the service\n" +" intree: displays the service's tree name\n" +" status: displays the status\n" +" type: displays the service type\n" +" description: displays the description\n" +" source: displays the source of the service's frontend file\n" +" live: displays the service's live directory\n" +" depends: displays the service's dependencies\n" +" requiredby: displays the service(s) which depends on service\n" +" extdepends: displays the service's external dependencies\n" +" optsdepends: displays the service's optional dependencies\n" +" start: displays the service's start script\n" +" stop: displays the service's stop script\n" +" envat: displays the source of the environment file\n" +" envfile: displays the contents of the environment file\n" +" logname: displays the logger's name\n" +" logdst: displays the logger's destination\n" +" logfile: displays the contents of the log file\n" +; + +char const *usage_boot = "66 boot [ -h ] [ -z ] [ -m ] [ -s skel ] [ -l log_user ] [ -e environment ] [ -d dev ] [ -b banner ]" ; + +char const *help_boot = +"\n" +"options :\n" +" -h: print this help\n" +" -z: use color\n" +" -m: mount parent live directory\n" +" -s: skeleton directory\n" +" -l: run catch-all logger as log_user user\n" +" -e: environment directory or file\n" +" -d: dev directory\n" +" -b: banner to display\n" +; + +char const *usage_scanctl = "66 scanctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -d notif ] [ -t rescan ] [ -e environment ] [ -o owner ] start|stop|reload|quit|nuke|zombies or any s6-svscanctl options" ; + +char const *help_scanctl = +"\n" +"options :\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -d: notify readiness on file descriptor\n" +" -t: rescan scandir every milliseconds\n" +" -e: environment directory\n" +" -o: handles scandir of owner\n" +; + +char const *usage_scandir = "66 scandir [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -b|B ] [ -c ] [ -L log_user ] [ -s skel ] [ -o owner ] create|remove" ; + +char const *help_scandir = +"\n" +"options :\n" +" -h: print this help\n" +" -z: use color\n" +" -v: increase/decrease verbosity\n" +" -l: live directory\n" +" -b: create scandir for a boot process\n" +" -B: create scandir for a boot process inside a container\n" +" -c: do not catch log\n" +" -L: run catch-all logger as log_user user\n" +" -s: skeleton directory\n" +" -o: handles owner scandir\n" +; + +char const *usage_66 = "66 start|stop|unsupervise|enable|disable|all|init|env|parse|svctl|tree|reconfigure|reload|restart|scanctl|scandir|boot service(s)|tree" ; diff --git a/src/66/66-inresolve.c b/src/lib66/exec/ssexec_inresolve.c similarity index 90% rename from src/66/66-inresolve.c rename to src/lib66/exec/ssexec_inresolve.c index f9729b14..2e126f4f 100644 --- a/src/66/66-inresolve.c +++ b/src/lib66/exec/ssexec_inresolve.c @@ -1,5 +1,5 @@ /* - * 66-inresolve.c + * ssexec_inresolve.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -18,7 +18,6 @@ #include <oblibs/log.h> #include <oblibs/sastr.h> #include <oblibs/string.h> -#include <oblibs/obgetopt.h> #include <oblibs/types.h> #include <skalibs/types.h> @@ -27,6 +26,7 @@ #include <skalibs/buffer.h> #include <66/resolve.h> +#include <66/ssexec.h> #include <66/tree.h> #include <66/service.h> #include <66/info.h> @@ -40,24 +40,6 @@ static wchar_t const field_suffix[] = L" :" ; static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ; -#define USAGE "66-inresolve [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] tree|service name" - -static inline void info_help (void) -{ - DEFAULT_MSG = 0 ; - - static char const *help = -"\n" -"options :\n" -" -h: print this help\n" -" -z: use color\n" -" -v: increase/decrease verbosity\n" -" -t: only search service at the specified tree\n" -; - - log_info(USAGE,"\n",help) ; -} - static inline unsigned int lookup (char const *const *table, char const *data) { log_flow() ; @@ -199,63 +181,24 @@ static void info_display_service_field(resolve_service_t *res) } -int main(int argc, char const *const *argv) +int ssexec_inresolve(int argc, char const *const *argv, ssexec_t *info) { int found = 0, what = 0 ; uint8_t master = 0 ; stralloc sa = STRALLOC_ZERO ; char const *svname = 0 ; - char const *treename = 0 ; + char const *treename = info->treename.s ; char atree[SS_MAX_TREENAME + 1] ; - log_color = &log_color_disable ; - - PROG = "66-inresolve" ; - { - subgetopt l = SUBGETOPT_ZERO ; - - for (;;) - { - int opt = getopt_args(argc,argv, ">hv:zt:", &l) ; - if (opt == -1) break ; - if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ; - switch (opt) - { - case 'h' : - - info_help(); - return 0 ; - - case 'v' : - - if (!uint0_scan(l.arg, &VERBOSITY)) - log_usage(USAGE) ; - break ; - - case 'z' : - - log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; - break ; - - case 't' : - - treename = l.arg ; - break ; - - default : - - log_usage(USAGE) ; - } - } - argc -= l.ind ; argv += l.ind ; - } + argc-- ; + argv++ ; - if (argc < 2) log_usage(USAGE) ; + if (argc < 2) log_usage(usage_inresolve) ; what = parse_what(*argv) ; if (what == 2) - log_usage(USAGE) ; + log_usage(usage_inresolve) ; argv++; argc--; diff --git a/src/66/66-inservice.c b/src/lib66/exec/ssexec_inservice.c similarity index 84% rename from src/66/66-inservice.c rename to src/lib66/exec/ssexec_inservice.c index 8a1c97e3..a42e5ef4 100644 --- a/src/66/66-inservice.c +++ b/src/lib66/exec/ssexec_inservice.c @@ -1,5 +1,5 @@ /* - * 66-inservice.c + * ssexec_inservice.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -46,13 +46,30 @@ #include <66/state.h> #include <66/service.h> #include <66/graph.h> +#include <66/config.h> +#include <66/ssexec.h> #include <s6/supervise.h> +/** + * + * + * + * + * a revoir, notamment les fonctions appeler comme optsdeps + *le tname pour le tree etc etc + * + * + * + * + * + * + * + * + * */ static unsigned int REVERSE = 0 ; static unsigned int NOFIELD = 1 ; static unsigned int GRAPH = 0 ; -static char const *const *ENVP ; static unsigned int nlog = 20 ; static stralloc src = STRALLOC_ZERO ; static stralloc home = STRALLOC_ZERO ;// /var/lib/66/system or ${HOME}/system @@ -80,7 +97,7 @@ static void info_display_logname(char const *field, resolve_service_t *res) ; static void info_display_logdst(char const *field, resolve_service_t *res) ; static void info_display_logfile(char const *field, resolve_service_t *res) ; -info_graph_style *STYLE = &graph_default ; +info_graph_style *S_STYLE = &graph_default ; @@ -94,8 +111,6 @@ info_graph_style *STYLE = &graph_default ; - - info_opts_map_t const opts_sv_table[] = { { .str = "name", .svfunc = &info_display_name, .id = 0 }, @@ -124,52 +139,6 @@ info_opts_map_t const opts_sv_table[] = #define checkopts(n) if (n >= MAXOPTS) log_die(LOG_EXIT_USER, "too many options") #define DELIM ',' -#define USAGE "66-inservice [ -h ] [ -z ] [ -v verbosity ] [ -n ] [ -o name,intree,status,... ] [ -g ] [ -d depth ] [ -r ] [ -t tree ] [ -p nline ] service" - -static inline void info_help (void) -{ - DEFAULT_MSG = 0 ; - - static char const *help = -"\n" -"options :\n" -" -h: print this help\n" -" -z: use color\n" -" -v: increase/decrease verbosity\n" -" -n: do not display the field name\n" -" -o: comma separated list of field to display\n" -" -g: displays the contents field as graph\n" -" -d: limit the depth of the contents field recursion\n" -" -r: reverse the contents field\n" -" -t: only search service at the specified tree\n" -" -p: print n last lines of the log file\n" -"\n" -"valid fields for -o options are:\n" -"\n" -" name: displays the name\n" -" version: displays the version of the service\n" -" intree: displays the service's tree name\n" -" status: displays the status\n" -" type: displays the service type\n" -" description: displays the description\n" -" source: displays the source of the service's frontend file\n" -" live: displays the service's live directory\n" -" depends: displays the service's dependencies\n" -" requiredby: displays the service(s) which depends on service\n" -" extdepends: displays the service's external dependencies\n" -" optsdepends: displays the service's optional dependencies\n" -" start: displays the service's start script\n" -" stop: displays the service's stop script\n" -" envat: displays the source of the environment file\n" -" envfile: displays the contents of the environment file\n" -" logname: displays the logger's name\n" -" logdst: displays the logger's destination\n" -" logfile: displays the contents of the log file\n" -; - - log_info(USAGE,"\n",help) ; -} - char *print_nlog(char *str, int n) { int r = 0 ; @@ -246,9 +215,9 @@ static void info_get_status(resolve_service_t *res) pid_t pid ; ss_state_t sta = STATE_ZERO ; int warn_color = 0 ; - if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) + if (res->type == TYPE_CLASSIC) { - r = s6_svc_ok(res->sa.s + res->runat) ; + r = s6_svc_ok(res->sa.s + res->live.scandir) ; if (r != 1) { if (!bprintf(buffer_1,"%s%s%s\n",log_color->warning,"None",log_color->off)) @@ -259,10 +228,10 @@ static void info_get_status(resolve_service_t *res) unsigned int m = 0 ; newargv[m++] = SS_BINPREFIX "s6-svstat" ; - newargv[m++] = res->sa.s + res->runat ; + newargv[m++] = res->sa.s + res->live.scandir ; newargv[m++] = 0 ; - pid = child_spawn0(newargv[0],newargv,ENVP) ; + pid = child_spawn0(newargv[0],newargv,(char const *const *)environ) ; if (waitpid_nointr(pid,&wstat, 0) < 0) log_dieusys(LOG_EXIT_SYS,"wait for ",newargv[0]) ; @@ -271,31 +240,43 @@ static void info_get_status(resolve_service_t *res) } else { - char *ste = res->sa.s + res->state ; + char *ste = res->sa.s + res->path.home ; char *name = res->sa.s + res->name ; char *status = 0 ; - if (!state_check(ste,name)) + if (!state_check(ste, SS_STATUS)) { status = "unitialized" ; goto dis ; } - if (!state_read(&sta,ste,name)) + if (!state_read(&sta, ste, name)) log_dieusys(LOG_EXIT_SYS,"read state of: ",name) ; - if (sta.init) { + if (sta.toinit) { status = "unitialized" ; } - else if (!sta.state) + /* + * + * + * + * + * + * A revoir sta.statedir n'exist pas + * + * + * + * + * + else if (!sta.statedir) { status = "down" ; warn_color = 1 ; } - else if (sta.state) + else if (sta.statedir) { status = "up" ; warn_color = 2 ; - } + }*/ dis: if (!bprintf(buffer_1,"%s%s%s\n",warn_color > 1 ? log_color->valid : warn_color ? log_color->error : log_color->warning,status,log_color->off)) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; @@ -304,10 +285,16 @@ static void info_get_status(resolve_service_t *res) static void info_display_status(char const *field,resolve_service_t *res) { + ss_state_t ste = STATE_ZERO ; + uint32_t disen = 0 ; if (NOFIELD) info_display_field_name(field) ; - if (!bprintf(buffer_1,"%s%s%s%s",res->disen ? log_color->valid : log_color->error,res->disen ? "enabled" : "disabled",log_color->off,", ")) + if (state_read(&ste, res->sa.s + res->path.home, res->sa.s + res->name)) + log_dieusys(LOG_EXIT_SYS, "read state file of: ", res->sa.s + res->name) ; + + disen = FLAGS_ISSET(ste.isenabled, STATE_FLAGS_TRUE) ; + if (!bprintf(buffer_1,"%s%s%s%s", disen ? log_color->valid : log_color->error, disen ? "enabled" : "disabled", log_color->off, ", ")) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; if (buffer_putsflush(buffer_1,"") == -1) @@ -332,13 +319,13 @@ static void info_display_description(char const *field,resolve_service_t *res) static void info_display_source(char const *field,resolve_service_t *res) { if (NOFIELD) info_display_field_name(field) ; - info_display_string(res->sa.s + res->src) ; + info_display_string(res->sa.s + res->path.frontend) ; } static void info_display_live(char const *field,resolve_service_t *res) { if (NOFIELD) info_display_field_name(field) ; - info_display_string(res->sa.s + res->runat) ; + info_display_string(res->sa.s + res->live.scandir) ; } static void info_display_requiredby(char const *field, resolve_service_t *res) @@ -346,16 +333,17 @@ static void info_display_requiredby(char const *field, resolve_service_t *res) size_t padding = 1 ; int r ; graph_t graph = GRAPH_ZERO ; + stralloc deps = STRALLOC_ZERO ; if (NOFIELD) padding = info_display_field_name(field) ; else { field = 0 ; padding = 0 ; } - size_t treelen = strlen(res->sa.s + res->tree) ; + size_t treelen = strlen(res->sa.s + res->path.tree) ; char solve[treelen + SS_SVDIRS_LEN + 1] ; - auto_strings(solve, res->sa.s + res->tree, SS_SVDIRS) ; + auto_strings(solve, res->sa.s + res->path.tree, SS_SVDIRS) ; - if (!graph_build_service_bytree(&graph, solve, 2)) + if (!graph_build_service_bytree(&graph, solve, 2, 0)) log_dieu(LOG_EXIT_SYS,"build the graph dependencies") ; unsigned int list[graph.mlen] ; @@ -374,7 +362,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res) depth_t d = info_graph_init() ; - if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 1, REVERSE, &d, padding, STYLE)) + if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 1, REVERSE, &d, padding, S_STYLE)) log_dieu(LOG_EXIT_SYS,"display the requiredby list") ; goto freed ; @@ -382,7 +370,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res) } else { deps.len = 0 ; - r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 1) ; + r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 1, 0) ; if (r == -1) log_dieu(LOG_EXIT_SYS, "get the requiredby list") ; @@ -403,7 +391,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res) { if (!bprintf(buffer_1,"%s\n","/")) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; - if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off)) + if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", S_STYLE->last, log_color->warning,"None",log_color->off)) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; } else @@ -413,6 +401,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res) } freed: graph_free_all(&graph) ; + stralloc_free(&deps) ; } static void info_display_deps(char const *field, resolve_service_t *res) @@ -426,7 +415,7 @@ static void info_display_deps(char const *field, resolve_service_t *res) if (NOFIELD) padding = info_display_field_name(field) ; else { field = 0 ; padding = 0 ; } - if (!graph_build_service_bytree(&graph, res->sa.s + res->tree, 2)) + if (!graph_build_service_bytree(&graph, res->sa.s + res->path.tree, 2, 0)) log_dieu(LOG_EXIT_SYS,"build the graph dependencies") ; unsigned int list[graph.mlen] ; @@ -445,14 +434,14 @@ static void info_display_deps(char const *field, resolve_service_t *res) depth_t d = info_graph_init() ; - if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 0, REVERSE, &d, padding, STYLE)) + if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 0, REVERSE, &d, padding, S_STYLE)) log_dieu(LOG_EXIT_SYS,"display the dependencies list") ; goto freed ; } else { - r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 0) ; + r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 0, 0) ; if (r == -1) log_dieu(LOG_EXIT_SYS, "get the dependencies list") ; @@ -473,7 +462,7 @@ static void info_display_deps(char const *field, resolve_service_t *res) if (!bprintf(buffer_1,"%s\n","/")) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; - if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off)) + if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", S_STYLE->last, log_color->warning,"None",log_color->off)) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; } else @@ -494,7 +483,7 @@ static void info_display_with_source_tree(stralloc *list,resolve_service_t *res) stralloc ntree = STRALLOC_ZERO ; stralloc src = STRALLOC_ZERO ; stralloc tmp = STRALLOC_ZERO ; - char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ; + char const *exclude[2] = { SS_RESOLVE + 1, 0 } ; char *treename = 0 ; if (!auto_stra(&src,home.s)) log_die_nomem("stralloc") ; @@ -549,9 +538,9 @@ static void info_display_optsdeps(char const *field, resolve_service_t *res) if (NOFIELD) info_display_field_name(field) ; else field = 0 ; - if (!res->noptsdeps) goto empty ; + if (!res->dependencies.noptsdeps) goto empty ; - if (!sastr_clean_string(&salist,res->sa.s + res->optsdeps)) + if (!sastr_clean_string(&salist,res->sa.s + res->dependencies.optsdeps)) log_dieu(LOG_EXIT_SYS,"build dependencies list") ; info_display_with_source_tree(&salist,res) ; @@ -574,6 +563,7 @@ static void info_display_optsdeps(char const *field, resolve_service_t *res) static void info_display_extdeps(char const *field, resolve_service_t *res) { + /* stralloc salist = STRALLOC_ZERO ; if (NOFIELD) info_display_field_name(field) ; @@ -600,15 +590,16 @@ static void info_display_extdeps(char const *field, resolve_service_t *res) freed: stralloc_free(&salist) ; + */ } static void info_display_start(char const *field,resolve_service_t *res) { if (NOFIELD) info_display_field_name(field) ; else field = 0 ; - if (res->exec_run) + if (res->execute.run.run_user) { - info_display_nline(field,res->sa.s + res->exec_run) ; + info_display_nline(field,res->sa.s + res->execute.run.run_user) ; } else { @@ -621,9 +612,9 @@ static void info_display_stop(char const *field,resolve_service_t *res) { if (NOFIELD) info_display_field_name(field) ; else field = 0 ; - if (res->exec_finish) + if (res->execute.finish.run_user) { - info_display_nline(field,res->sa.s + res->exec_finish) ; + info_display_nline(field,res->sa.s + res->execute.finish.run_user) ; } else { @@ -638,10 +629,10 @@ static void info_display_envat(char const *field,resolve_service_t *res) if (NOFIELD) info_display_field_name(field) ; stralloc salink = STRALLOC_ZERO ; - if (!res->srconf) goto empty ; + if (!res->environ.envdir) goto empty ; { stralloc salink = STRALLOC_ZERO ; - char *src = res->sa.s + res->srconf ; + char *src = res->sa.s + res->environ.envdir ; size_t srclen = strlen(src) ; char sym[srclen + SS_SYM_VERSION_LEN + 1] ; @@ -680,9 +671,9 @@ static void info_display_envfile(char const *field,resolve_service_t *res) stralloc list = STRALLOC_ZERO ; char const *exclude[1] = { 0 } ; - if (res->srconf) + if (res->environ.envdir) { - char *src = res->sa.s + res->srconf ; + char *src = res->sa.s + res->environ.envdir ; size_t srclen = strlen(src), newlen ; char sym[srclen + SS_SYM_VERSION_LEN + 1] ; @@ -773,11 +764,11 @@ static void info_display_envfile(char const *field,resolve_service_t *res) static void info_display_logname(char const *field,resolve_service_t *res) { if (NOFIELD) info_display_field_name(field) ; - if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN) + if (res->type == TYPE_CLASSIC) { - if (res->logger) + if (res->logger.name) { - info_display_string(res->sa.s + res->logger) ; + info_display_string(res->sa.s + res->logger.name) ; } else goto empty ; } @@ -794,9 +785,9 @@ static void info_display_logdst(char const *field,resolve_service_t *res) if (NOFIELD) info_display_field_name(field) ; if (res->type != TYPE_BUNDLE || res->type != TYPE_MODULE) { - if (res->logger || (res->type == TYPE_ONESHOT && res->dstlog)) + if (res->logger.name || (res->type == TYPE_ONESHOT && res->logger.destination)) { - info_display_string(res->sa.s + res->dstlog) ; + info_display_string(res->sa.s + res->logger.destination) ; } else goto empty ; } @@ -813,15 +804,15 @@ static void info_display_logfile(char const *field,resolve_service_t *res) if (NOFIELD) info_display_field_name(field) ; if (res->type != TYPE_BUNDLE || res->type != TYPE_MODULE) { - if (res->logger || (res->type == TYPE_ONESHOT && res->dstlog)) + if (res->logger.name || (res->type == TYPE_ONESHOT && res->logger.destination)) { if (nlog) { stralloc log = STRALLOC_ZERO ; /** the file current may not exist if the service was never started*/ - size_t dstlen = strlen(res->sa.s + res->dstlog) ; + size_t dstlen = strlen(res->sa.s + res->logger.destination) ; char scan[dstlen + 9] ; - memcpy(scan,res->sa.s + res->dstlog,dstlen) ; + memcpy(scan,res->sa.s + res->logger.destination,dstlen) ; memcpy(scan + dstlen,"/current",8) ; scan[dstlen + 8] = 0 ; int r = scan_mode(scan,S_IFREG) ; @@ -833,7 +824,7 @@ static void info_display_logfile(char const *field,resolve_service_t *res) } else { - if (!file_readputsa(&log,res->sa.s + res->dstlog,"current")) log_dieusys(LOG_EXIT_SYS,"read log file of: ",res->sa.s + res->name) ; + if (!file_readputsa(&log,res->sa.s + res->logger.destination,"current")) log_dieusys(LOG_EXIT_SYS,"read log file of: ",res->sa.s + res->name) ; /* we don't need to freed stralloc * file_readputsa do it if the file is empty*/ if (!log.len) goto empty ; @@ -902,7 +893,7 @@ static void info_parse_options(char const *str,int *what) stralloc_free(&sa) ; } -int main(int argc, char const *const *argv, char const *const *envp) +int ssexec_inservice(int argc, char const *const *argv, ssexec_t *info) { unsigned int legacy = 1 ; int found = 0 ; @@ -915,12 +906,8 @@ int main(int argc, char const *const *argv, char const *const *envp) resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ; stralloc satree = STRALLOC_ZERO ; - log_color = &log_color_disable ; - char const *svname = 0 ; - char const *tname = 0 ; - - ENVP = envp ; + char atree[SS_MAX_TREENAME + 1] ; for (int i = 0 ; i < MAXOPTS ; i++) what[i] = -1 ; @@ -947,34 +934,29 @@ int main(int argc, char const *const *argv, char const *const *envp) "Log destination", "Log file" } ; - PROG = "66-inservice" ; { subgetopt l = SUBGETOPT_ZERO ; for (;;) { - int opt = subgetopt_r(argc,argv, "hzv:cno:grd:t:p:", &l) ; + int opt = subgetopt_r(argc,argv, OPTS_INSERVICE, &l) ; if (opt == -1) break ; switch (opt) { - case 'h' : info_help(); return 0 ; - case 'v' : if (!uint0_scan(l.arg, &VERBOSITY)) log_usage(USAGE) ; break ; - case 'z' : log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ; case 'n' : NOFIELD = 0 ; break ; case 'o' : legacy = 0 ; info_parse_options(l.arg,what) ; break ; case 'g' : GRAPH = 1 ; break ; case 'r' : REVERSE = 1 ; break ; - case 'd' : if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(USAGE) ; break ; - case 't' : tname = l.arg ; break ; - case 'p' : if (!uint0_scan(l.arg, &nlog)) log_usage(USAGE) ; break ; - default : log_usage(USAGE) ; + case 'd' : if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(usage_inservice) ; break ; + case 'p' : if (!uint0_scan(l.arg, &nlog)) log_usage(usage_inservice) ; break ; + default : log_usage(usage_inservice) ; } } argc -= l.ind ; argv += l.ind ; } - if (!argc) log_usage(USAGE) ; + if (!argc) log_usage(usage_inservice) ; svname = *argv ; if (legacy) @@ -995,14 +977,21 @@ int main(int argc, char const *const *argv, char const *const *envp) setlocale(LC_ALL, ""); if(!strcmp(nl_langinfo(CODESET), "UTF-8")) { - STYLE = &graph_utf8; + S_STYLE = &graph_utf8; } if (!set_ownersysdir(&home,owner)) log_dieusys(LOG_EXIT_SYS, "set owner directory") ; if (!auto_stra(&home,SS_SYSTEM,"/")) log_die_nomem("stralloc") ; - found = service_intree(&src,svname,tname) ; + /* + * + * + * sortie a revoir pour le passage vers service_is_g + * + * + * */ + found = service_is_g(atree, svname, STATE_FLAGS_ISENABLED) ; - if (found == -1) log_dieu(LOG_EXIT_SYS,"resolve tree source of service: ",svname) ; + if (found == -1) log_dieusys(LOG_EXIT_SYS,"resolve tree source of service: ",svname) ; else if (!found) { log_info("no tree exist yet") ; goto freed ; @@ -1011,7 +1000,19 @@ int main(int argc, char const *const *argv, char const *const *envp) log_die(LOG_EXIT_SYS,svname," is set on different tree -- please use -t options") ; } else if (found == 1) log_die(LOG_EXIT_SYS,"unknown service: ",svname) ; - + /** + * + * + * + * le src.s est vide ducon + * + * a revoir + * + * + * + * + * + * */ if (!resolve_read(wres,src.s,svname)) log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",svname) ; diff --git a/src/66/66-instate.c b/src/lib66/exec/ssexec_instate.c similarity index 76% rename from src/66/66-instate.c rename to src/lib66/exec/ssexec_instate.c index 0d5898e6..312794e9 100644 --- a/src/66/66-instate.c +++ b/src/lib66/exec/ssexec_instate.c @@ -1,5 +1,5 @@ /* - * 66-instate.c + * ssexec_instate.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -27,6 +27,7 @@ #include <skalibs/buffer.h> #include <66/resolve.h> +#include <66/ssexec.h> #include <66/info.h> #include <66/utils.h> #include <66/constants.h> @@ -83,7 +84,7 @@ static void info_display_int(char const *field,unsigned int id) info_display_string(field,str) ; } -int main(int argc, char const *const *argv) +int ssexec_instate(int argc, char const *const *argv, ssexec_t *info) { int found = 0 ; resolve_service_t res = RESOLVE_SERVICE_ZERO ; @@ -94,8 +95,6 @@ int main(int argc, char const *const *argv) char const *ste = 0 ; char atree[SS_MAX_TREENAME + 1] ; - log_color = &log_color_disable ; - char buf[MAXOPTS][INFO_FIELD_MAXLEN] = { "toinit", "toreload", @@ -108,47 +107,10 @@ int main(int argc, char const *const *argv) "issupervised", "isup" } ; - PROG = "66-instate" ; - { - subgetopt l = SUBGETOPT_ZERO ; - - for (;;) - { - int opt = getopt_args(argc,argv, ">hv:zt:", &l) ; - if (opt == -1) break ; - if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ; - switch (opt) - { - case 'h' : - - info_help(); - return 0 ; - - case 'v' : - - if (!uint0_scan(l.arg, &VERBOSITY)) - log_usage(USAGE) ; - - break ; - - case 'z' : - - log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; - break ; - - case 't' : - - log_1_warn("deprecated option -t -- ignore it") ; - break ; - - default : - log_usage(USAGE) ; - } - } - argc -= l.ind ; argv += l.ind ; - } + argc-- ; + argv++ ; - if (!argc) log_usage(USAGE) ; + if (!argc) log_usage(usage_instate) ; svname = *argv ; if (!set_ownersysdir_stack(base, getuid())) diff --git a/src/66/66-intree.c b/src/lib66/exec/ssexec_intree.c similarity index 86% rename from src/66/66-intree.c rename to src/lib66/exec/ssexec_intree.c index b7bbfc9c..27a7911f 100644 --- a/src/66/66-intree.c +++ b/src/lib66/exec/ssexec_intree.c @@ -1,5 +1,5 @@ /* - * 66-intree.c + * ssexec_intree.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -22,12 +22,11 @@ #include <oblibs/sastr.h> #include <oblibs/log.h> -#include <oblibs/obgetopt.h> #include <oblibs/types.h> #include <oblibs/string.h> #include <oblibs/files.h> -#include <skalibs/stralloc.h> +#include <skalibs/sgetopt.h> #include <skalibs/genalloc.h> #include <skalibs/lolstdio.h> #include <skalibs/bytestr.h> @@ -40,8 +39,8 @@ #include <66/enum.h> #include <66/resolve.h> #include <66/service.h> -#include <66/backup.h> #include <66/graph.h> +#include <66/ssexec.h> static unsigned int REVERSE = 0 ; static unsigned int NOFIELD = 1 ; @@ -65,7 +64,7 @@ static void info_display_allow(char const *field,char const *treename) ; static void info_display_symlink(char const *field,char const *treename) ; static void info_display_contents(char const *field,char const *treename) ; static void info_display_groups(char const *field,char const *treename) ; -info_graph_style *STYLE = &graph_default ; +static info_graph_style *T_STYLE = &graph_default ; info_opts_map_t const opts_tree_table[] = { @@ -86,41 +85,6 @@ info_opts_map_t const opts_tree_table[] = #define checkopts(n) if (n >= MAXOPTS) log_die(LOG_EXIT_USER, "too many options") #define DELIM ',' -#define USAGE "66-intree [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -n ] [ -o name,init,enabled,... ] [ -g ] [ -d depth ] [ -r ] tree" - -static inline void info_help (void) -{ - DEFAULT_MSG = 0 ; - - static char const *help = -"\n" -"options :\n" -" -h: print this help\n" -" -z: use color\n" -" -v: increase/decrease verbosity\n" -" -l: live directory\n" -" -n: do not display the names of fields\n" -" -o: comma separated list of field to display\n" -" -g: displays the contents field as graph\n" -" -d: limit the depth of the contents field recursion\n" -" -r: reverse the contents field\n" -"\n" -"valid fields for -o options are:\n" -"\n" -" name: displays the name of the tree\n" -" current: displays a boolean value of the current state\n" -" enabled: displays a boolean value of the enable state\n" -" init: displays a boolean value of the initialization state\n" -" depends: displays the list of tree(s) started before\n" -" requiredby: displays the list of tree(s) started after\n" -" allowed: displays a list of allowed user to use the tree\n" -" symlinks: displays the target of tree's symlinks\n" -" contents: displays the contents of the tree\n" -; - - log_info(USAGE,"\n",help) ; -} - static void info_display_name(char const *field, char const *treename) { if (NOFIELD) info_display_field_name(field) ; @@ -187,10 +151,9 @@ static void info_display_depends(char const *field, char const *treename) if (NOFIELD) padding = info_display_field_name(field) ; else { field = 0 ; padding = 0 ; } - if (!graph_build_g(&graph, base.s, treename, DATA_TREE, 0)) - log_dieu(LOG_EXIT_SYS,"build the graph") ; + graph_build_tree(&graph, base.s) ; - r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 0) ; + r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 0, 0) ; if (r < 0) log_dieu(LOG_EXIT_SYS, "get the dependencies list") ; @@ -203,7 +166,7 @@ static void info_display_depends(char const *field, char const *treename) depth_t d = info_graph_init() ; - if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 0, REVERSE, &d, padding, STYLE)) + if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 0, REVERSE, &d, padding, T_STYLE)) log_dieu(LOG_EXIT_SYS,"display the graph dependencies") ; goto freed ; @@ -224,7 +187,7 @@ static void info_display_depends(char const *field, char const *treename) if (!bprintf(buffer_1,"%s\n","/")) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; - if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off)) + if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", T_STYLE->last, log_color->warning,"None",log_color->off)) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; } else { @@ -248,10 +211,9 @@ static void info_display_requiredby(char const *field, char const *treename) if (NOFIELD) padding = info_display_field_name(field) ; else { field = 0 ; padding = 0 ; } - if (!graph_build_g(&graph, base.s, treename, DATA_TREE, 0)) - log_dieu(LOG_EXIT_SYS,"build the graph") ; + graph_build_tree(&graph, base.s) ; - r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 1) ; + r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 1, 0) ; if (r < 0) log_dieu(LOG_EXIT_SYS, "get the dependencies list") ; @@ -265,7 +227,7 @@ static void info_display_requiredby(char const *field, char const *treename) depth_t d = info_graph_init() ; - if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 1, REVERSE, &d, padding, STYLE)) + if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 1, REVERSE, &d, padding, T_STYLE)) log_dieu(LOG_EXIT_SYS,"display the graph dependencies") ; goto freed ; @@ -287,7 +249,7 @@ static void info_display_requiredby(char const *field, char const *treename) if (!bprintf(buffer_1,"%s\n","/")) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; - if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off)) + if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", T_STYLE->last, log_color->warning,"None",log_color->off)) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; } else { @@ -339,6 +301,7 @@ static void info_display_allow(char const *field, char const *treename) static void info_display_symlink(char const *field, char const *treename) { + /* if (NOFIELD) info_display_field_name(field) ; ssexec_t info = SSEXEC_ZERO ; if (!auto_stra(&info.treename,treename)) log_die_nomem("stralloc") ; @@ -369,6 +332,7 @@ static void info_display_symlink(char const *field, char const *treename) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; ssexec_free(&info) ; + */ } static void info_display_contents(char const *field, char const *treename) @@ -385,7 +349,7 @@ static void info_display_contents(char const *field, char const *treename) auto_strings(tmp, src.s, treename, SS_SVDIRS) ; - if (!graph_build_service_bytree(&graph, tmp, 2)) + if (!graph_build_service_bytree(&graph, tmp, 2, 0)) log_dieu(LOG_EXIT_SYS,"build the graph dependencies") ; if (!graph_matrix_sort_tosa(&sa, &graph)) @@ -400,7 +364,7 @@ static void info_display_contents(char const *field, char const *treename) depth_t d = info_graph_init() ; - if (!info_walk(&graph, 0, treename, &info_graph_display_service, 0, REVERSE, &d, padding, STYLE)) + if (!info_walk(&graph, 0, treename, &info_graph_display_service, 0, REVERSE, &d, padding, T_STYLE)) log_dieu(LOG_EXIT_SYS,"display the graph dependencies") ; goto freed ; @@ -421,7 +385,7 @@ static void info_display_contents(char const *field, char const *treename) if (!bprintf(buffer_1,"%s\n","/")) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; - if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off)) + if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", T_STYLE->last, log_color->warning,"None",log_color->off)) log_dieusys(LOG_EXIT_SYS,"write to stdout") ; } else @@ -524,15 +488,13 @@ static void info_parse_options(char const *str,int *what) stralloc_free(&sa) ; } -int main(int argc, char const *const *argv, char const *const *envp) +int ssexec_intree(int argc, char const *const *argv, ssexec_t *info) { unsigned int legacy = 1 ; size_t pos, newlen, livelen ; int what[MAXOPTS] = { 0 } ; - log_color = &log_color_disable ; - char const *treename = 0 ; for (int i = 0 ; i < MAXOPTS ; i++) @@ -554,29 +516,25 @@ int main(int argc, char const *const *argv, char const *const *envp) stralloc satree = STRALLOC_ZERO ; - PROG = "66-intree" ; { subgetopt l = SUBGETOPT_ZERO ; for (;;) { - int opt = getopt_args(argc,argv, ">hzv:no:grd:l:", &l) ; + int opt = subgetopt_r(argc, argv, OPTS_INTREE, &l) ; if (opt == -1) break ; - if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ; + switch (opt) { - case 'h' : info_help(); return 0 ; - case 'v' : if (!uint0_scan(l.arg, &VERBOSITY)) log_usage(USAGE) ; break ; - case 'z' : log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ; case 'n' : NOFIELD = 0 ; break ; case 'o' : legacy = 0 ; info_parse_options(l.arg,what) ; break ; case 'g' : GRAPH = 1 ; break ; case 'r' : REVERSE = 1 ; break ; - case 'd' : if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(USAGE) ; break ; - case 'l' : if (!stralloc_cats(&live,l.arg)) log_usage(USAGE) ; - if (!stralloc_0(&live)) log_usage(USAGE) ; + case 'd' : if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(usage_intree) ; break ; + case 'l' : if (!stralloc_cats(&live,l.arg)) log_usage(usage_intree) ; + if (!stralloc_0(&live)) log_usage(usage_intree) ; break ; - default : log_usage(USAGE) ; + default : log_usage(usage_intree) ; } } argc -= l.ind ; argv += l.ind ; @@ -602,7 +560,7 @@ int main(int argc, char const *const *argv, char const *const *envp) setlocale(LC_ALL, ""); if(!str_diff(nl_langinfo(CODESET), "UTF-8")) { - STYLE = &graph_utf8; + T_STYLE = &graph_utf8; } if (!set_ownersysdir(&base,OWNER)) log_dieusys(LOG_EXIT_SYS, "set owner directory") ; @@ -634,7 +592,7 @@ int main(int argc, char const *const *argv, char const *const *envp) } else { - char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ; + char const *exclude[2] = { SS_RESOLVE + 1, 0 } ; if (!stralloc_0(&src)) log_die_nomem("stralloc") ; if (!sastr_dir_get(&satree, src.s,exclude, S_IFDIR)) log_dieusys(LOG_EXIT_SYS,"get list of tree at: ",src.s) ; diff --git a/src/66/66-scanctl.c b/src/lib66/exec/ssexec_scanctl.c similarity index 74% rename from src/66/66-scanctl.c rename to src/lib66/exec/ssexec_scanctl.c index 073c3dc3..cc0d9978 100644 --- a/src/66/66-scanctl.c +++ b/src/lib66/exec/ssexec_scanctl.c @@ -1,5 +1,5 @@ /* - * 66-scanctl.c + * ssexec_scanctl.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -16,10 +16,10 @@ #include <fcntl.h> #include <oblibs/log.h> -#include <oblibs/obgetopt.h> #include <oblibs/string.h> #include <oblibs/environ.h> +#include <skalibs/sgetopt.h> #include <skalibs/stralloc.h> #include <skalibs/types.h> #include <skalibs/djbunix.h> @@ -31,31 +31,10 @@ #include <66/svc.h> #include <66/utils.h> +#include <66/ssexec.h> static char TMPENV[MAXENV + 1] ; -#define USAGE "66-scanctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -d notif ] [ -t rescan ] [ -e environment ] [ -o owner ] start|stop|reload|quit|nuke|zombies or any s6-svscanctl options" - -static inline void info_help (void) -{ - DEFAULT_MSG = 0 ; - - static char const *help = -"\n" -"options :\n" -" -h: print this help\n" -" -z: use color\n" -" -v: increase/decrease verbosity\n" -" -l: live directory\n" -" -d: notify readiness on file descriptor\n" -" -t: rescan scandir every milliseconds\n" -" -e: environment directory\n" -" -o: handles scandir of owner\n" -; - - log_info(USAGE,"\n",help) ; -} - static inline unsigned int lookup (char const *const *table, char const *signal) { log_flow() ; @@ -175,7 +154,7 @@ static void scandir_up(char const *scandir, unsigned int timeout, unsigned int n xexec_ae(newup[0], newup, envp) ; } -int main(int argc, char const *const *argv, char const *const *envp) +int ssexec_scanctl(int argc, char const *const *argv, ssexec_t *info) { int r ; uid_t owner = MYUID ; @@ -183,53 +162,21 @@ int main(int argc, char const *const *argv, char const *const *envp) char const *newenv[MAXENV+1] ; char const *const *genv = 0 ; + char const *const *genvp = (char const *const *)environ ; char const *signal ; - char str[UINT_FMT] ; stralloc scandir = STRALLOC_ZERO ; stralloc envdir = STRALLOC_ZERO ; - log_color = &log_color_disable ; - - PROG = "66-scanctl" ; { subgetopt l = SUBGETOPT_ZERO ; - for (;;) - { - int opt = getopt_args(argc,argv, ">hv:zl:o:d:t:e:", &l) ; - if (opt == -1) break ; - if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ; - switch (opt) - { - case 'h' : - - info_help() ; - return 0 ; - - case 'v' : - - if (!uint0_scan(l.arg, &VERBOSITY)) - log_usage(USAGE) ; - - break ; - - case 'z' : - - log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; - break ; - - case 'l' : - - str[uint_fmt(str, SS_MAX_PATH)] = 0 ; + for (;;) { - if (strlen(l.arg) > SS_MAX_PATH) - log_die(LOG_EXIT_USER,"live path is too long -- it can not exceed ", str) ; + int opt = subgetopt_r(argc,argv, OPTS_SCANCTL, &l) ; + if (opt == -1) break ; - if (!auto_stra(&scandir,l.arg)) - log_die_nomem("stralloc") ; - - break ; + switch (opt) { case 'o' : @@ -244,7 +191,7 @@ int main(int argc, char const *const *argv, char const *const *envp) case 'd' : if (!uint0_scan(l.arg, ¬if)) - log_usage(USAGE) ; + log_usage(usage_scanctl) ; if (notif < 3) log_die(LOG_EXIT_USER, "notification fd must be 3 or more") ; @@ -257,7 +204,7 @@ int main(int argc, char const *const *argv, char const *const *envp) case 't' : if (!uint0_scan(l.arg, &timeout)) - log_usage(USAGE) ; + log_usage(usage_scanctl) ; break ; @@ -270,13 +217,13 @@ int main(int argc, char const *const *argv, char const *const *envp) default : - log_usage(USAGE) ; + log_usage(usage_scanctl) ; } } argc -= l.ind ; argv += l.ind ; } - if (argc < 1) log_usage(USAGE) ; + if (argc < 1) log_usage(usage_scanctl) ; signal = argv[0] ; r = set_livedir(&scandir) ; if (r < 0) log_die(LOG_EXIT_USER,"live: ",scandir.s," must be an absolute path") ; @@ -294,20 +241,21 @@ int main(int argc, char const *const *argv, char const *const *envp) if (!environ_clean_envfile_unexport(&modifs,envdir.s)) log_dieu(LOG_EXIT_SYS,"clean environment file of: ",envdir.s) ; - size_t envlen = env_len(envp) ; - size_t n = env_len(envp) + 1 + byte_count(modifs.s,modifs.len,'\0') ; + + size_t envlen = env_len(genvp) ; + size_t n = env_len(genvp) + 1 + byte_count(modifs.s,modifs.len,'\0') ; size_t mlen = modifs.len ; memcpy(TMPENV,modifs.s,mlen) ; TMPENV[mlen] = 0 ; - if (!env_merge(newenv, n, envp, envlen, TMPENV, mlen)) + if (!env_merge(newenv, n, genvp, envlen, TMPENV, mlen)) log_dieu(LOG_EXIT_SYS,"merge environment") ; stralloc_free(&modifs) ; genv = newenv ; } - else genv = envp ; + else genv = genvp ; sig = parse_signal(signal) ; diff --git a/src/66/66-scandir.c b/src/lib66/exec/ssexec_scandir.c similarity index 96% rename from src/66/66-scandir.c rename to src/lib66/exec/ssexec_scandir.c index 4dd6dea1..f870ac2b 100644 --- a/src/66/66-scandir.c +++ b/src/lib66/exec/ssexec_scandir.c @@ -1,5 +1,5 @@ /* - * 66-scandir.c + * ssexec_scandir.c * * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org> * @@ -19,7 +19,6 @@ #include <sys/stat.h> #include <stdarg.h> -#include <oblibs/obgetopt.h> #include <oblibs/log.h> #include <oblibs/directory.h> #include <oblibs/types.h> @@ -28,6 +27,7 @@ #include <oblibs/environ.h> #include <skalibs/stralloc.h> +#include <skalibs/sgetopt.h> #include <skalibs/djbunix.h> #include <skalibs/types.h> #include <skalibs/env.h> @@ -39,6 +39,7 @@ #include <execline/config.h> #include <66/config.h> +#include <66/ssexec.h> #include <66/svc.h> #include <66/utils.h> #include <66/enum.h> @@ -763,7 +764,7 @@ void sanitize_live(char const *live) auto_check(tmp,0755,PERM1777,AUTO_CRTE_CHW_CHM) ; } -int main(int argc, char const *const *argv, char const *const *envp) +int ssexec_scandir(int argc, char const *const *argv, ssexec_t *info) { int r ; unsigned int cmd, create, remove ; @@ -771,41 +772,22 @@ int main(int argc, char const *const *argv, char const *const *envp) stralloc live = STRALLOC_ZERO ; stralloc scandir = STRALLOC_ZERO ; - log_color = &log_color_disable ; - CONFIG_STR_LEN = compute_buf_size(SS_BINPREFIX, SS_EXTBINPREFIX, SS_EXTLIBEXECPREFIX, SS_LIBEXECPREFIX, SS_EXECLINE_SHEBANGPREFIX, 0) ; cmd = create = remove = 0 ; OWNER = MYUID ; - PROG = "66-scandir" ; { subgetopt l = SUBGETOPT_ZERO ; for (;;) { - int opt = getopt_args(argc,argv, ">hzv:bl:s:o:L:cB", &l) ; + int opt = subgetopt_r(argc, argv, OPTS_SCANDIR, &l) ; if (opt == -1) break ; - if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ; + switch (opt) { - case 'h' : - - info_help() ; - return 0 ; - - case 'z' : - - log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; - break ; - - case 'v' : - - if (!uint0_scan(l.arg, &VERBOSITY)) - log_usage(USAGE) ; - break ; - case 'b' : BOOT = 1 ; @@ -850,19 +832,19 @@ int main(int argc, char const *const *argv, char const *const *envp) default : - log_usage(USAGE) ; + log_usage(usage_scandir) ; } } argc -= l.ind ; argv += l.ind ; } if (!argc) - log_usage(USAGE) ; + log_usage(usage_scandir) ; cmd = parse_command(argv[0]) ; if (cmd == 3) { - log_usage(USAGE) ; + log_usage(usage_scandir) ; } else if (!cmd) { create = 1 ; } else { -- GitLab