From 6ffb8bc06f50a90ce082ed7e4c582e810acb4291 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Wed, 30 Nov 2022 13:58:55 +1100
Subject: [PATCH] cleanup the old info memory usage, be smarter at
 sanitize_system call

---
 src/66/66.c | 78 ++++++++++++++---------------------------------------
 1 file changed, 20 insertions(+), 58 deletions(-)

diff --git a/src/66/66.c b/src/66/66.c
index aba41001..dc1f8974 100644
--- a/src/66/66.c
+++ b/src/66/66.c
@@ -61,8 +61,7 @@ static void set_info(ssexec_t *info)
 
     int r ;
 
-    if (!info->skip_opt_tree)
-        set_treeinfo(info) ;
+    set_treeinfo(info) ;
 
     r = set_livedir(&info->live) ;
     if (!r)
@@ -80,6 +79,17 @@ static void set_info(ssexec_t *info)
         log_die(LOG_EXIT_SYS, "scandir: ", info->scandir.s, " must be an absolute path") ;
 }
 
+static void info_clean(ssexec_t *info)
+{
+
+    info->base.len = 0 ;
+    info->live.len = 0 ;
+    info->tree.len = 0 ;
+    info->scandir.len = 0 ;
+    info->treename.len = 0 ;
+
+}
+
 int main(int argc, char const *const *argv)
 {
 
@@ -89,6 +99,7 @@ int main(int argc, char const *const *argv)
     }
 
     int r, n = 0, i = 0 ;
+    uint8_t sanitize = 0 ;
     /** 30 options should be large enough */
     char opts[30] ;
     char const *main = "hv:l:t:T:z" ;
@@ -99,6 +110,8 @@ int main(int argc, char const *const *argv)
     ssexec_func_t_ref func = 0 ;
     log_color = &log_color_disable ;
 
+    info_clean(&info) ;
+
     info.owner = getuid() ;
     info.ownerlen = uid_fmt(info.ownerstr, info.owner) ;
     info.ownerstr[info.ownerlen] = 0 ;
@@ -116,7 +129,7 @@ int main(int argc, char const *const *argv)
         info.usage = usage_boot ;
         func = &ssexec_boot ;
 
-        //sanitize_system(&info) ;
+        sanitize++ ;
 
         auto_strings(opts, main, OPTS_BOOT) ;
 
@@ -129,8 +142,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_enable ;
         func = &ssexec_enable ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_ENABLE) ;
 
     } else if (!strcmp(argv[1], "disable")) {
@@ -142,8 +153,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_disable ;
         func = &ssexec_disable ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_DISABLE) ;
 
     } else if (!strcmp(argv[1], "start")) {
@@ -155,8 +164,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_start ;
         func = &ssexec_start ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_START) ;
 
     } else if (!strcmp(argv[1], "stop")) {
@@ -168,24 +175,9 @@ int main(int argc, char const *const *argv)
         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")) {
+    }  else if (!strcmp(argv[1], "all")) {
 
         PROG = "all" ;
         nargv[n++] = PROG ;
@@ -194,8 +186,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_all ;
         func = &ssexec_all ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_ALL) ;
 
     } else if (!strcmp(argv[1], "env")) {
@@ -207,8 +197,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_env ;
         func = &ssexec_env ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_ENV) ;
 
     } else if (!strcmp(argv[1], "init")) {
@@ -220,8 +208,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_init ;
         func = &ssexec_init ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_INIT) ;
 
     } else if (!strcmp(argv[1], "parse")) {
@@ -233,8 +219,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_parse ;
         func = &ssexec_parse ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_PARSE) ;
 
     } else if (!strcmp(argv[1], "reconfigure")) {
@@ -246,8 +230,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_reconfigure ;
         func = &ssexec_reconfigure ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_SUBSTART) ;
 
     } else if (!strcmp(argv[1], "reload")) {
@@ -259,8 +241,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_reload ;
         func = &ssexec_reload ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_SUBSTART) ;
 
     } else if (!strcmp(argv[1], "restart")) {
@@ -272,8 +252,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_restart ;
         func = &ssexec_restart ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_SUBSTART) ;
 
     } else if (!strcmp(argv[1], "unsupervise")) {
@@ -286,8 +264,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_stop ;
         func = &ssexec_stop ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_STOP) ;
 
     } else if (!strcmp(argv[1], "svctl")) {
@@ -299,8 +275,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_svctl ;
         func = &ssexec_svctl ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_SVCTL) ;
 
     } else if (!strcmp(argv[1], "tree")) {
@@ -312,8 +286,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_tree ;
         func = &ssexec_tree ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_TREE) ;
 
     } else if (!strcmp(argv[1], "inresolve")) {
@@ -325,8 +297,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_inresolve ;
         func = &ssexec_inresolve ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_INRESOLVE) ;
 
     } else if (!strcmp(argv[1], "instate")) {
@@ -338,8 +308,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_instate ;
         func = &ssexec_instate ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_INSTATE) ;
 
     } else if (!strcmp(argv[1], "intree")) {
@@ -351,8 +319,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_intree ;
         func = &ssexec_intree ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_INTREE) ;
 
     } else if (!strcmp(argv[1], "inservice")) {
@@ -364,8 +330,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_inservice ;
         func = &ssexec_inservice ;
 
-        sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_INSERVICE) ;
 
     } else if (!strcmp(argv[1], "scanctl")) {
@@ -377,8 +341,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_scanctl ;
         func = &ssexec_scanctl ;
 
-        //sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_SCANCTL) ;
 
     } else if (!strcmp(argv[1], "scandir")) {
@@ -390,8 +352,6 @@ int main(int argc, char const *const *argv)
         info.usage = usage_scandir ;
         func = &ssexec_scandir ;
 
-        //sanitize_system(&info) ;
-
         auto_strings(opts, main, OPTS_SCANDIR) ;
 
     } else {
@@ -449,7 +409,6 @@ int main(int argc, char const *const *argv)
                         log_die_nomem("stralloc") ;
 
                     info.opt_tree = 1 ;
-                    info.skip_opt_tree = 0 ;
                     break ;
 
                 case 'T' :
@@ -505,6 +464,9 @@ int main(int argc, char const *const *argv)
         argc -= l.ind ; argv += l.ind ;
     }
 
+    if (!sanitize)
+        sanitize_system(&info) ;
+
     set_info(&info) ;
 
     for (i = 0 ; i < argc ; i++ , argv++)
-- 
GitLab