From ac23ca6d64df1dbdde7fc8821aa337f8a5b8c410 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Sun, 12 Mar 2023 23:37:17 +1100
Subject: [PATCH] pass service {status,resolve,state,remove,signal} to main
 command

---
 src/66/66.c                                   |  48 ++++-
 src/include/66/ssexec.h                       |  48 ++---
 src/lib66/exec/deps-lib/deps                  |  11 +-
 src/lib66/exec/ssexec_help.c                  | 150 +++++++--------
 src/lib66/exec/ssexec_remove.c                |  21 +++
 ...xec_service_resolve.c => ssexec_resolve.c} |   6 +-
 src/lib66/exec/ssexec_service_admin.c         | 171 ------------------
 src/lib66/exec/ssexec_service_wrapper.c       | 148 ---------------
 ...sexec_service_signal.c => ssexec_signal.c} |   5 +-
 ...{ssexec_service_state.c => ssexec_state.c} |   7 +-
 ...sexec_service_status.c => ssexec_status.c} |  18 +-
 src/lib66/svc/svc_send.c                      |   2 +-
 12 files changed, 167 insertions(+), 468 deletions(-)
 create mode 100644 src/lib66/exec/ssexec_remove.c
 rename src/lib66/exec/{ssexec_service_resolve.c => ssexec_resolve.c} (98%)
 delete mode 100644 src/lib66/exec/ssexec_service_admin.c
 delete mode 100644 src/lib66/exec/ssexec_service_wrapper.c
 rename src/lib66/exec/{ssexec_service_signal.c => ssexec_signal.c} (99%)
 rename src/lib66/exec/{ssexec_service_state.c => ssexec_state.c} (95%)
 rename src/lib66/exec/{ssexec_service_status.c => ssexec_status.c} (98%)

diff --git a/src/66/66.c b/src/66/66.c
index b3134755..bd4d9566 100644
--- a/src/66/66.c
+++ b/src/66/66.c
@@ -327,21 +327,51 @@ int main(int argc, char const *const *argv)
         PROG = "signal" ;
         nargv[n++] = PROG ;
         info.prog = PROG ;
-        info.help = help_service_signal ;
-        info.usage = usage_service_signal ;
-        func = &ssexec_service_signal ;
+        info.help = help_signal ;
+        info.usage = usage_signal ;
+        func = &ssexec_signal ;
 
-    } else if (!strcmp(argv[0], "tree")) {
+    } else if (!strcmp(argv[0], "status")) {
 
-        PROG = "tree" ;
+        PROG = "status" ;
         nargv[n++] = PROG ;
-        func = &ssexec_tree_wrapper ;
+        info.prog = PROG ;
+        info.help = help_status ;
+        info.usage = usage_status ;
+        func = &ssexec_status ;
+
+    } else if (!strcmp(argv[0], "resolve")) {
 
-    } else if (!strcmp(argv[0], "service")) {
+        PROG = "resolve" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_resolve ;
+        info.usage = usage_resolve ;
+        func = &ssexec_resolve ;
+
+    } else if (!strcmp(argv[0], "state")) {
 
-        PROG = "service" ;
+        PROG = "state" ;
         nargv[n++] = PROG ;
-        func = &ssexec_service_wrapper ;
+        info.prog = PROG ;
+        info.help = help_state ;
+        info.usage = usage_state ;
+        func = &ssexec_state ;
+
+    } else if (!strcmp(argv[0], "remove")) {
+
+        PROG = "remove" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_remove ;
+        info.usage = usage_remove ;
+        func = &ssexec_remove ;
+
+    } else if (!strcmp(argv[0], "tree")) {
+
+        PROG = "tree" ;
+        nargv[n++] = PROG ;
+        func = &ssexec_tree_wrapper ;
 
     } else if (!strcmp(argv[0], "scandir")) {
 
diff --git a/src/include/66/ssexec.h b/src/include/66/ssexec.h
index 836620da..eac0d39e 100644
--- a/src/include/66/ssexec.h
+++ b/src/include/66/ssexec.h
@@ -110,12 +110,11 @@ extern ssexec_func_t ssexec_scandir_remove ;
 extern ssexec_func_t ssexec_scandir_signal ;
 
 /** service */
-extern ssexec_func_t ssexec_service_resolve ;
-extern ssexec_func_t ssexec_service_state ;
-extern ssexec_func_t ssexec_service_status ;
-extern ssexec_func_t ssexec_service_wrapper ;
-extern ssexec_func_t ssexec_service_admin ;
-extern ssexec_func_t ssexec_service_signal ;
+extern ssexec_func_t ssexec_status ;
+extern ssexec_func_t ssexec_resolve ;
+extern ssexec_func_t ssexec_state ;
+extern ssexec_func_t ssexec_remove ;
+extern ssexec_func_t ssexec_signal ;
 
 /** tree */
 extern ssexec_func_t ssexec_tree_wrapper ;
@@ -131,42 +130,40 @@ extern void info_help (char const *help,char const *usage) ;
 
 extern char const *usage_66 ;
 extern char const *help_66 ;
-
 extern char const *usage_boot ;
 extern char const *help_boot ;
-
 extern char const *usage_enable ;
 extern char const *help_enable ;
-
 extern char const *usage_disable ;
 extern char const *help_disable ;
-
 extern char const *usage_start ;
 extern char const *help_start ;
-
 extern char const *usage_stop ;
 extern char const *help_stop ;
-
 extern char const *usage_env ;
 extern char const *help_env ;
-
 extern char const *usage_init ;
 extern char const *help_init ;
-
 extern char const *usage_parse ;
 extern char const *help_parse ;
-
 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_status ;
+extern char const *help_status ;
+extern char const *usage_resolve ;
+extern char const *help_resolve ;
+extern char const *usage_state ;
+extern char const *help_state ;
+extern char const *usage_remove ;
+extern char const *help_remove ;
+extern char const *usage_signal ;
+extern char const *help_signal ;
 
 extern char const *usage_tree_wrapper ;
 extern char const *help_tree_wrapper ;
@@ -193,19 +190,6 @@ extern char const *help_tree_down ;
 extern char const *usage_tree_unsupervise ;
 extern char const *help_tree_unsupervise ;
 
-extern char const *usage_service_wrapper ;
-extern char const *help_service_wrapper ;
-extern char const *usage_service_status ;
-extern char const *help_service_status ;
-extern char const *usage_service_resolve ;
-extern char const *help_service_resolve ;
-extern char const *usage_service_state ;
-extern char const *help_service_state ;
-extern char const *usage_service_remove ;
-extern char const *help_service_remove ;
-extern char const *usage_service_signal ;
-extern char const *help_service_signal ;
-
 extern char const *usage_scandir_wrapper ;
 extern char const *help_scandir_wrapper ;
 extern char const *usage_scandir_create ;
@@ -246,7 +230,7 @@ extern char const *help_halt ;
 #define OPTS_PARSE_LEN (sizeof OPTS_PARSE - 1)
 #define OPTS_INIT "h"
 #define OPTS_INIT_LEN (sizeof OPTS_INIT - 1)
-#define OPTS_ENABLE "hfFSI"
+#define OPTS_ENABLE "hfSI"
 #define OPTS_ENABLE_LEN (sizeof OPTS_ENABLE - 1)
 #define OPTS_DISABLE "hS"
 #define OPTS_DISABLE_LEN (sizeof OPTS_DISABLE - 1)
diff --git a/src/lib66/exec/deps-lib/deps b/src/lib66/exec/deps-lib/deps
index bb7e80fd..f2e2bf7d 100644
--- a/src/lib66/exec/deps-lib/deps
+++ b/src/lib66/exec/deps-lib/deps
@@ -9,19 +9,18 @@ ssexec_init.o
 ssexec_parse.o
 ssexec_reconfigure.o
 ssexec_reload.o
+ssexec_remove.o
+ssexec_resolve.o
 ssexec_restart.o
 ssexec_scandir_create.o
 ssexec_scandir_remove.o
 ssexec_scandir_signal.o
 ssexec_scandir_wrapper.o
-ssexec_service_admin.o
-ssexec_service_resolve.o
-ssexec_service_signal.o
-ssexec_service_state.o
-ssexec_service_status.o
-ssexec_service_wrapper.o
 ssexec_shutdown_wrapper.o
+ssexec_signal.o
 ssexec_start.o
+ssexec_state.o
+ssexec_status.o
 ssexec_stop.o
 ssexec_tree_admin.o
 ssexec_tree_resolve.o
diff --git a/src/lib66/exec/ssexec_help.c b/src/lib66/exec/ssexec_help.c
index 711593f6..554d8cb6 100644
--- a/src/lib66/exec/ssexec_help.c
+++ b/src/lib66/exec/ssexec_help.c
@@ -73,7 +73,7 @@ char const *help_boot =
 "   -b: banner to display\n"
 ;
 
-char const *usage_enable = "66 enable [ -h ] [ -f|F ] [ -I ] [ -S ] service..." ;
+char const *usage_enable = "66 enable [ -h ] [ -f ] [ -I ] [ -S ] service..." ;
 
 char const *help_enable =
 "\nactivate services at the next boot\n"
@@ -81,7 +81,6 @@ char const *help_enable =
 "options:\n"
 "   -h: print this help\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"
 ;
@@ -192,9 +191,72 @@ char const *help_unsupervise =
 "   -P: do not propagate signal to its dependencies\n"
 ;
 
-char const *usage_service_signal = "66 signal [ -h ] [ -wu | -wU | -wd | -wD | -wr | -wR ] [ -abqHkti12pcyodDuUxOr ] service..." ;
+char const *usage_status = "66 status [ -h ] [ -n ] [ -o name,intree,status,... ] [ -g ] [ -d depth ] [ -r ] [ -p nline ] service..." ;
 
-char const *help_service_signal =
+char const *help_status =
+"\ndisplay services informations\n"
+"\n"
+"options :\n"
+"   -h: print this help\n"
+"   -n: do not display the field name\n"
+"   -o: comma separated list of options\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"
+"   -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"
+"   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_resolve = "66 resolve [ -h ] service" ;
+
+char const *help_resolve =
+"\ndisplay the resolve files contents of services\n"
+"\n"
+"options:\n"
+"   -h: print this help\n"
+;
+
+char const *usage_state = "66 state [ -h ] service" ;
+
+char const *help_state =
+"\ndisplay state files contents of services\n"
+"\n"
+"options:\n"
+"   -h: print this help\n"
+;
+
+char const *usage_remove = "66 remove [ -h ] service" ;
+
+char const *help_remove =
+"\nremove services and cleanup all files belong to it from the system\n"
+"\n"
+"options :\n"
+"   -h: print this help\n"
+;
+
+char const *usage_signal = "66 signal [ -h ] [ -wu | -wU | -wd | -wD | -wr | -wR ] [ -abqHkti12pcyodDuUxOr ] service..." ;
+
+char const *help_signal =
 "\nsend a signal to services\n"
 "\n"
 "options:\n"
@@ -399,86 +461,6 @@ char const *help_tree_unsupervise =
 "If no tree name are provided, it unsupervise all enabled trees from the system\n"
 ;
 
-char const *usage_service_wrapper = "66 service [ -h ] status|resolve|state|remove [<command options>] service..." ;
-
-char const *help_service_wrapper =
-"\nmain sub tools to view and manages services\n"
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"\n"
-"command:\n"
-"   status: displays information of the service\n"
-"   resolve: displays the resolve file of the service\n"
-"   state: displays the state file of the service\n"
-"   remove: remove and cleanup the service\n"
-"\n"
-"Use '66 service <command> -h' to see command options\n"
-;
-
-char const *usage_service_status = "66 service status [ -h ] [ -n ] [ -o name,intree,status,... ] [ -g ] [ -d depth ] [ -r ] [ -p nline ] service..." ;
-
-char const *help_service_status =
-"\ndisplay services informations\n"
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"   -n: do not display the field name\n"
-"   -o: comma separated list of options\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"
-"   -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"
-"   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_service_resolve = "66 service resolve [ -h ] service" ;
-
-char const *help_service_resolve =
-"\ndisplay the resolve files contents of services\n"
-"\n"
-"options:\n"
-"   -h: print this help\n"
-;
-
-char const *usage_service_state = "66 service state [ -h ] service" ;
-
-char const *help_service_state =
-"\ndisplay state files contents of services\n"
-"\n"
-"options:\n"
-"   -h: print this help\n"
-;
-
-char const *usage_service_remove = "66 service remove [ -h ] service" ;
-
-char const *help_service_remove =
-"\nremove services and cleanup all files belong to it from the system\n"
-"\n"
-"options :\n"
-"   -h: print this help\n"
-;
-
 char const *usage_scandir_wrapper = "66 scandir [ -h ] [ -o owner ] create|remove|start|stop|reconfigure|rescan|quit|halt|abort|nuke|annihilate|zombies [<command options>]" ;
 
 char const *help_scandir_wrapper =
diff --git a/src/lib66/exec/ssexec_remove.c b/src/lib66/exec/ssexec_remove.c
new file mode 100644
index 00000000..6e152a66
--- /dev/null
+++ b/src/lib66/exec/ssexec_remove.c
@@ -0,0 +1,21 @@
+/*
+ * ssexec_remove.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 <66/ssexec.h>
+
+int ssexec_remove(int argc, char const *const *argv, ssexec_t *info)
+{
+
+
+}
diff --git a/src/lib66/exec/ssexec_service_resolve.c b/src/lib66/exec/ssexec_resolve.c
similarity index 98%
rename from src/lib66/exec/ssexec_service_resolve.c
rename to src/lib66/exec/ssexec_resolve.c
index 9fe37b2f..9681f2fc 100644
--- a/src/lib66/exec/ssexec_service_resolve.c
+++ b/src/lib66/exec/ssexec_resolve.c
@@ -1,5 +1,5 @@
 /*
- * ssexec_service_resolve.c
+ * ssexec_resolve.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -157,7 +157,7 @@ static void info_display_service_field(resolve_service_t *res)
 
 }
 
-int ssexec_service_resolve(int argc, char const *const *argv, ssexec_t *info)
+int ssexec_resolve(int argc, char const *const *argv, ssexec_t *info)
 {
     int r = 0 ;
 
@@ -171,7 +171,7 @@ int ssexec_service_resolve(int argc, char const *const *argv, ssexec_t *info)
     argv++ ;
 
     if (argc < 1)
-        log_usage(usage_service_resolve, "\n", help_service_resolve) ;
+        log_usage(info->usage, "\n", info->help) ;
 
     svname = *argv ;
 
diff --git a/src/lib66/exec/ssexec_service_admin.c b/src/lib66/exec/ssexec_service_admin.c
deleted file mode 100644
index d54fb548..00000000
--- a/src/lib66/exec/ssexec_service_admin.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * ssexec_service_admin.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 <oblibs/log.h>
-
-#include <skalibs/sgetopt.h>
-
-#include <66/ssexec.h>
-#include <66/config.h>
-
-int ssexec_service_admin(int argc, char const *const *argv, ssexec_t *info)
-{
-    log_flow() ;
-
-    if (!argv[1]) {
-        PROG = "service" ;
-        log_usage(usage_service_remove, "\n", help_service_remove) ;
-    }
-
-    int r, n = 0, i = 0 ;
-/*    uint8_t ctl = 0 ;
-    ssexec_func_t_ref func = 0 ;
-    char const *nargv[argc + 1] ;
-
-    if (!strcmp(argv[1], "status")) {
-
-        nargv[n++] = PROG ;
-
-        info->prog = PROG ;
-        info->help = help_inservice ;
-        info->usage = usage_inservice ;
-        func = &ssexec_inservice ;
-
-        argc-- ;
-        argv++ ;
-
-    } else if (!strcmp(argv[1], "resolve")) {
-
-        nargv[n++] = PROG ;
-
-        info->prog = PROG ;
-        info->help = help_inresolve ;
-        info->usage = usage_inresolve ;
-        func = &ssexec_resolve_service ;
-
-        argc-- ;
-        argv++ ;
-
-    } else if (!strcmp(argv[1], "state")) {
-
-        nargv[n++] = PROG ;
-
-        info->prog = PROG ;
-        info->help = help_instate ;
-        info->usage = usage_instate ;
-        func = &ssexec_instate ;
-
-        argc-- ;
-        argv++ ;
-
-    } else if (!strcmp(argv[1], "remove")) {
-
-        nargv[n++] = PROG ;
-
-        info->prog = PROG ;
-        info->help = help_instate ;
-        info->usage = usage_instate ;
-        func = &ssexec_service_admin ;
-
-        argc-- ;
-        argv++ ;
-
-    } else {
-
-        log_usage(usage_service_admin, "\n", help_service_admin) ;
-    }
-
-    {
-        subgetopt l = SUBGETOPT_ZERO ;
-
-        int f = 0 ;
-        for (;;) {
-
-            int opt = subgetopt_r(argc, argv, "", &l) ;
-            if (opt == -1) break ;
-            switch (opt) {
-
-                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 ;
-    }
-
-    for (i = 0 ; i < argc ; i++ , argv++)
-        nargv[n++] = *argv ;
-
-    nargv[n] = 0 ;
-
-    if (ctl) {
-        /* swap the command and options e.g.
-         * down -f <treename> <-> -f down <treename>
-        if (n > 2) {
-            /* swap the command and options e.g.
-             * down -f <-> -f down
-            nargv[n] = nargv[n-1] ;
-            nargv[n-1] = nargv[0] ;
-            nargv[++n] = 0 ;
-
-        } else if (nargv[n-1][0] == '-') {
-            nargv[n++] = nargv[0] ;
-            nargv[n] = 0 ;
-        } else {
-            nargv[n] = nargv[n-1] ;
-            nargv[n-1] = nargv[0] ;
-            nargv[++n] = 0 ;
-        }
-
-    }
-
-    r = (*func)(n, nargv, info) ;
-*/
-r = 0 ;
-    return r ;
-}
diff --git a/src/lib66/exec/ssexec_service_wrapper.c b/src/lib66/exec/ssexec_service_wrapper.c
deleted file mode 100644
index 53f6e298..00000000
--- a/src/lib66/exec/ssexec_service_wrapper.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * ssexec_service_wrapper.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 <oblibs/log.h>
-
-#include <skalibs/sgetopt.h>
-
-#include <66/ssexec.h>
-#include <66/config.h>
-
-int ssexec_service_wrapper(int argc, char const *const *argv, ssexec_t *info)
-{
-    log_flow() ;
-
-    if (!argv[1]) {
-        PROG = "service" ;
-        log_usage(usage_service_wrapper, "\n", help_service_wrapper) ;
-    }
-
-    int r, n = 0, i = 0 ;
-    ssexec_func_t_ref func = 0 ;
-    char const *nargv[argc + 1] ;
-
-    if (!strcmp(argv[1], "status")) {
-
-        nargv[n++] = PROG ;
-        info->prog = PROG ;
-        info->help = help_service_status ;
-        info->usage = usage_service_status ;
-        func = &ssexec_service_status ;
-
-    } else if (!strcmp(argv[1], "resolve")) {
-
-        nargv[n++] = PROG ;
-        info->prog = PROG ;
-        info->help = help_service_resolve ;
-        info->usage = usage_service_resolve ;
-        func = &ssexec_service_resolve ;
-
-    } else if (!strcmp(argv[1], "state")) {
-
-        nargv[n++] = PROG ;
-        info->prog = PROG ;
-        info->help = help_service_state ;
-        info->usage = usage_service_state ;
-        func = &ssexec_service_state ;
-
-    } else if (!strcmp(argv[1], "remove")) {
-
-        nargv[n++] = PROG ;
-        info->prog = PROG ;
-        info->help = help_service_remove ;
-        info->usage = usage_service_remove ;
-        func = &ssexec_service_admin ;
-
-    } else {
-
-        if (!strcmp(argv[1], "-h")) {
-            info_help(help_service_wrapper, usage_service_wrapper) ;
-            return 0 ;
-        }
-
-        log_usage(usage_service_wrapper, "\n", help_service_wrapper) ;
-    }
-
-    argc-- ;
-    argv++ ;
-
-    {
-        subgetopt l = SUBGETOPT_ZERO ;
-
-        int f = 0 ;
-        for (;;) {
-
-            int opt = subgetopt_r(argc, argv, "-h", &l) ;
-            if (opt == -1) break ;
-            switch (opt) {
-
-                case 'h' :
-
-                    info_help(info->help, info->usage) ;
-                    return 0 ;
-
-                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 ;
-    }
-
-    if (argc < 1)
-        log_usage(info->usage, "\n", info->help) ;
-
-    for (i = 0 ; i < argc ; i++ , argv++)
-        nargv[n++] = *argv ;
-
-    nargv[n] = 0 ;
-
-    r = (*func)(n, nargv, info) ;
-
-    return r ;
-}
diff --git a/src/lib66/exec/ssexec_service_signal.c b/src/lib66/exec/ssexec_signal.c
similarity index 99%
rename from src/lib66/exec/ssexec_service_signal.c
rename to src/lib66/exec/ssexec_signal.c
index 5bf181ad..bc7680e4 100644
--- a/src/lib66/exec/ssexec_service_signal.c
+++ b/src/lib66/exec/ssexec_signal.c
@@ -1,5 +1,5 @@
 /*
- * ssexec_service_signal.c
+ * ssexec_signal.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -12,6 +12,7 @@
  * except according to the terms contained in the LICENSE file./
  */
 
+
 #include <string.h>
 #include <errno.h>
 #include <sys/wait.h>
@@ -801,7 +802,7 @@ static int waitit(pidservice_t *apids, unsigned int what, graph_t *graph, tain *
         return e ;
 }
 
-int ssexec_service_signal(int argc, char const *const *argv, ssexec_t *info)
+int ssexec_signal(int argc, char const *const *argv, ssexec_t *info)
 {
     log_flow() ;
 
diff --git a/src/lib66/exec/ssexec_service_state.c b/src/lib66/exec/ssexec_state.c
similarity index 95%
rename from src/lib66/exec/ssexec_service_state.c
rename to src/lib66/exec/ssexec_state.c
index 403fb6f0..61fc74ad 100644
--- a/src/lib66/exec/ssexec_service_state.c
+++ b/src/lib66/exec/ssexec_state.c
@@ -1,5 +1,5 @@
 /*
- * ssexec_service_state.c
+ * ssexec_state.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -12,6 +12,7 @@
  * except according to the terms contained in the LICENSE file./
  */
 
+
 #include <string.h>
 #include <wchar.h>
 
@@ -67,7 +68,7 @@ static void info_display_int(char const *field,unsigned int id)
     info_display_string(field,str) ;
 }
 
-int ssexec_service_state(int argc, char const *const *argv, ssexec_t *info)
+int ssexec_state(int argc, char const *const *argv, ssexec_t *info)
 {
     int found = 0 ;
     resolve_service_t res = RESOLVE_SERVICE_ZERO ;
@@ -93,7 +94,7 @@ int ssexec_service_state(int argc, char const *const *argv, ssexec_t *info)
     argc-- ;
     argv++ ;
 
-    if (!argc) log_usage(usage_service_state, "\n", help_service_state) ;
+    if (!argc) log_usage(info->usage, "\n", info->help) ;
     svname = *argv ;
 
     if (!set_ownersysdir_stack(base, getuid()))
diff --git a/src/lib66/exec/ssexec_service_status.c b/src/lib66/exec/ssexec_status.c
similarity index 98%
rename from src/lib66/exec/ssexec_service_status.c
rename to src/lib66/exec/ssexec_status.c
index 14585cba..4354986c 100644
--- a/src/lib66/exec/ssexec_service_status.c
+++ b/src/lib66/exec/ssexec_status.c
@@ -1,5 +1,5 @@
 /*
- * ssexec_service_status.c
+ * ssexec_status.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -95,11 +95,11 @@ 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 *S_STYLE = &graph_default ;
+static info_graph_style *S_STYLE = &graph_default ;
 
 static ssexec_t_ref pinfo = 0 ;
 
-info_opts_map_t const opts_sv_table[] =
+static info_opts_map_t const opts_sv_table[] =
 {
     { .str = "name", .svfunc = &info_display_name, .id = 0 },
     { .str = "version", .svfunc = &info_display_version, .id = 1 },
@@ -126,7 +126,7 @@ info_opts_map_t const opts_sv_table[] =
 #define checkopts(n) if (n >= MAXOPTS) log_die(LOG_EXIT_USER, "too many options")
 #define DELIM ','
 
-char *print_nlog(char *str, int n)
+static char *print_nlog(char *str, int n)
 {
     int r = 0 ;
     int delim ='\n' ;
@@ -823,7 +823,7 @@ static void info_parse_options(char const *str,int *what)
     stralloc_free(&sa) ;
 }
 
-int ssexec_service_status(int argc, char const *const *argv, ssexec_t *info)
+int ssexec_status(int argc, char const *const *argv, ssexec_t *info)
 {
     unsigned int legacy = 1 ;
     int r = 0 ;
@@ -874,16 +874,16 @@ int ssexec_service_status(int argc, char const *const *argv, ssexec_t *info)
                 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_service_status, "\n", help_service_status) ; break ;
-                case 'p' :  if (!uint0_scan(l.arg, &nlog)) log_usage(usage_service_status, "\n", help_service_status) ; break ;
-                default :   log_usage(usage_service_status, "\n", help_service_status) ;
+                case 'd' :  if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(info->usage, "\n", info->help) ; break ;
+                case 'p' :  if (!uint0_scan(l.arg, &nlog)) log_usage(info->usage, "\n", info->help) ; break ;
+                default :   log_usage(info->usage, "\n", info->help) ;
             }
         }
         argc -= l.ind ; argv += l.ind ;
     }
 
     if (!argc)
-        log_usage(usage_service_status, "\n", help_service_status) ;
+        log_usage(info->usage, "\n", info->help) ;
 
     svname = *argv ;
 
diff --git a/src/lib66/svc/svc_send.c b/src/lib66/svc/svc_send.c
index 6f087a50..042e4e0d 100644
--- a/src/lib66/svc/svc_send.c
+++ b/src/lib66/svc/svc_send.c
@@ -35,6 +35,6 @@ int svc_send(char const *const *list, unsigned int nservice, char **sig, unsigne
 
     newargv[m++] = 0 ;
 
-    return ssexec_service_signal(nargc, newargv, info) ;
+    return ssexec_signal(nargc, newargv, info) ;
 
 }
-- 
GitLab