From 1fcda6cf12487271760981c34d4f0eb42a303001 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Fri, 27 Jan 2023 11:06:47 +1100
Subject: [PATCH] use of state flags, remove envp parameter

---
 src/lib66/exec/ssexec_env.c | 42 ++++++++++++++++++-------------------
 1 file changed, 20 insertions(+), 22 deletions(-)

diff --git a/src/lib66/exec/ssexec_env.c b/src/lib66/exec/ssexec_env.c
index 2a400ef1..6954937f 100644
--- a/src/lib66/exec/ssexec_env.c
+++ b/src/lib66/exec/ssexec_env.c
@@ -35,10 +35,11 @@
 #include <66/ssexec.h>
 #include <66/utils.h>
 #include <66/config.h>
-#include <66/parser.h>
 #include <66/environ.h>
 #include <66/constants.h>
 #include <66/resolve.h>
+#include <66/write.h>
+#include <66/state.h>
 
 static char const *EDITOR = 0 ;
 
@@ -67,7 +68,7 @@ static uint8_t check_current_version(char const *svconf,char const *version)
     return !version_cmp(bname,version,SS_CONFIG_VERSION_NDOT) ? 1 : 0 ;
 }
 
-static void run_editor(char const *src, char const *sv, char const *const *envp)
+static void run_editor(char const *src, char const *sv)
 {
     log_flow() ;
 
@@ -86,7 +87,7 @@ static void run_editor(char const *src, char const *sv, char const *const *envp)
         }
     }
     char const *const newarg[3] = { EDITOR, tsrc, 0 } ;
-    xexec_ae (newarg[0],newarg,envp) ;
+    xexec_ae (newarg[0],newarg, (char const *const *)environ) ;
 }
 
 static void do_import(char const *svname, char const *svconf, char const *version, int svtype)
@@ -193,8 +194,7 @@ static void write_user_env_file(char const *src, char const *sv)
             if (r == -1)
                 log_die(LOG_EXIT_SYS,"invalid upstream configuration file! Do you have modified it? Tries to enable the service again.") ;
 
-            if (!write_env(sv,sa.s + r,src))
-                log_dieusys(LOG_EXIT_SYS,"write: ",src,"/",sv);
+            write_environ(sv, sa.s + r, src) ;
         }
         else
             log_diesys(LOG_EXIT_SYS,"conflicting format of file: ",tsrc) ;
@@ -203,8 +203,10 @@ static void write_user_env_file(char const *src, char const *sv)
     stralloc_free(&sa) ;
 }
 
-int ssexec_env(int argc, char const *const *argv,char const *const *envp,ssexec_t *info)
+int ssexec_env(int argc, char const *const *argv, ssexec_t *info)
 {
+    log_flow() ;
+
     int r ;
     size_t pos = 0 ;
     stralloc satmp = STRALLOC_ZERO ;
@@ -216,9 +218,11 @@ int ssexec_env(int argc, char const *const *argv,char const *const *envp,ssexec_
     resolve_service_t res = RESOLVE_SERVICE_ZERO ;
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
 
+    char atree[SS_MAX_TREENAME + 1] ;
+
     uint8_t todo = T_UNSET ;
 
-    char const *sv = 0, *svconf = 0, *src = 0, *treename = 0, *import = 0 ;
+    char const *sv = 0, *svconf = 0, *src = 0, *import = 0 ;
 
     {
         subgetopt l = SUBGETOPT_ZERO ;
@@ -292,29 +296,23 @@ int ssexec_env(int argc, char const *const *argv,char const *const *envp,ssexec_
 
     if (todo == T_UNSET && !import && !saversion.len && !eversion.len) todo = T_EDIT ;
 
-    treename = !info->opt_tree ? 0 : info->treename.s ;
-
-    r = service_intree(&sasrc,sv,treename) ;
-    if (r == -1) log_dieu(LOG_EXIT_SYS,"resolve tree source of sv: ",sv) ;
+    r = service_is_g(atree, sv, STATE_FLAGS_ISPARSED) ;
+    if (r == -1)
+        log_dieusys(LOG_EXIT_SYS, "get information of service: ", sv, " -- please a bug report") ;
     else if (!r) {
-        log_info("no tree exist yet") ;
+        log_warn(sv, " is not parsed -- try to parse it first") ;
         goto freed ;
     }
-    else if (r > 2) {
-        log_die(LOG_EXIT_SYS,sv," is set on different tree -- please use -t options") ;
-    }
-    else if (r == 1) log_die(LOG_EXIT_SYS,"unknown service: ",sv, !info->opt_tree ? " in current tree: " : " in tree: ", info->treename.s) ;
 
-    if (!resolve_read(wres,sasrc.s,sv))
-        log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",sv) ;
+    if (!resolve_read_g(wres, info->base.s, sv))
+        log_dieusys(LOG_EXIT_SYS,"read resolve file of: ", sv) ;
 
-    if (!res.srconf) {
+    if (!res.environ.envdir) {
         log_1_warn(sv," do not have configuration file") ;
         goto freed ;
     }
 
-    svconf = res.sa.s + res.srconf ;
-    sasrc.len = 0 ;
+    svconf = res.sa.s + res.environ.envdir ;
 
     if (saversion.len)
     {
@@ -421,7 +419,7 @@ int ssexec_env(int argc, char const *const *argv,char const *const *envp,ssexec_
 
             write_user_env_file(src,sv) ;
 
-            run_editor(src, sv, envp) ;
+            run_editor(src, sv) ;
 
         /** Can't happens */
         default: break ;
-- 
GitLab