From 0ebd554b91fa5623aef6deccfa1e1ffa57eced02 Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Wed, 1 Dec 2021 10:10:27 +1100
Subject: [PATCH] use of new sastr_dir_get interface

---
 src/lib66/ss_resolve.c | 23 +++++++++++++++++------
 src/lib66/ssexec_all.c | 33 ++++++++++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/src/lib66/ss_resolve.c b/src/lib66/ss_resolve.c
index 0bf628a4..12afd2db 100644
--- a/src/lib66/ss_resolve.c
+++ b/src/lib66/ss_resolve.c
@@ -268,6 +268,7 @@ int ss_resolve_src(stralloc *sasrc, char const *name, char const *src,int *found
     stralloc sainsta = STRALLOC_ZERO ;
     stralloc satmp = STRALLOC_ZERO ;
     stralloc sort = STRALLOC_ZERO ;
+    char const *exclude[1] = { 0 } ;
 
     if (!ss_resolve_sort_byfile_first(&sort,src))
     {
@@ -307,8 +308,8 @@ int ss_resolve_src(stralloc *sasrc, char const *name, char const *src,int *found
                 int rd = ss_resolve_service_isdir(dname,bname) ;
                 if (rd == -1) goto err ;
                 if (!rd)
-                    r = sastr_dir_get(&satmp,dname,"",S_IFREG|S_IFDIR) ;
-                else r = sastr_dir_get(&satmp,dname,"",S_IFREG) ;
+                    r = sastr_dir_get(&satmp,dname,exclude,S_IFREG|S_IFDIR) ;
+                else r = sastr_dir_get(&satmp,dname,exclude,S_IFREG) ;
                 if (!r)
                 {
                     log_warnusys("get services from directory: ",dname) ;
@@ -433,6 +434,12 @@ int ss_resolve_read(ss_resolve_t *res, char const *src, char const *name)
     return 1 ;
 }
 
+/** not used
+ *
+ *
+ *
+ *
+ *
 int ss_resolve_check_insrc(ssexec_t *info, char const *name)
 {
     log_flow() ;
@@ -446,6 +453,9 @@ int ss_resolve_check_insrc(ssexec_t *info, char const *name)
         stralloc_free(&sares) ;
         return 0 ;
 }
+*
+*
+*/
 
 int ss_resolve_check(char const *src, char const *name)
 {
@@ -789,7 +799,7 @@ int ss_resolve_cmp(genalloc *ga,char const *name)
     {
         char *string = genalloc_s(ss_resolve_t,ga)[i].sa.s ;
         char *s = string + genalloc_s(ss_resolve_t,ga)[i].name ;
-        if (obstr_equal(name,s)) return 1 ;
+        if (!strcmp(name,s)) return 1 ;
     }
     return 0 ;
 }
@@ -898,6 +908,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src)
     stralloc tmp = STRALLOC_ZERO ;
     stralloc nsv = STRALLOC_ZERO ;
     ss_state_t sta = STATE_ZERO ;
+    char const *exclude[2] = { SS_MASTER + 1, 0 } ;
 
     char *name = res->sa.s + res->name ;
     size_t srclen = strlen(src), a = 0, b = 0, c = 0 ;
@@ -909,7 +920,7 @@ int ss_resolve_add_rdeps(genalloc *tokeep, ss_resolve_t *res, char const *src)
     if (res->type == TYPE_CLASSIC) type = 0 ;
     else type = 1 ;
 
-    if (!sastr_dir_get(&nsv,s,SS_MASTER+1,S_IFREG)) goto err ;
+    if (!sastr_dir_get(&nsv,s,exclude,S_IFREG)) goto err ;
 
     if (!ss_resolve_cmp(tokeep,name) && (!obstr_equal(name,SS_MASTER+1)))
     {
@@ -1396,7 +1407,7 @@ int ss_resolve_svtree(stralloc *svtree,char const *svname,char const *tree)
     size_t pos, newlen ;
     stralloc satree = STRALLOC_ZERO ;
     stralloc tmp = STRALLOC_ZERO ;
-
+    char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
 
     if (!set_ownersysdir(svtree,owner)) { log_warnusys("set owner directory") ; goto err ; }
     if (!auto_stra(svtree,SS_SYSTEM)) goto err ;
@@ -1412,7 +1423,7 @@ int ss_resolve_svtree(stralloc *svtree,char const *svname,char const *tree)
 
     if (!stralloc_copy(&tmp,svtree)) goto err ;
 
-    if (!sastr_dir_get(&satree, svtree->s,SS_BACKUP + 1, S_IFDIR)) {
+    if (!sastr_dir_get(&satree, svtree->s,exclude, S_IFDIR)) {
         log_warnu("get list of trees from directory: ",svtree->s) ;
         goto err ;
     }
diff --git a/src/lib66/ssexec_all.c b/src/lib66/ssexec_all.c
index f8dc8854..be758090 100644
--- a/src/lib66/ssexec_all.c
+++ b/src/lib66/ssexec_all.c
@@ -73,6 +73,7 @@ int all_doit(ssexec_t *info, unsigned int what, char const *const *envp)
     int r ;
 
     stralloc salist = STRALLOC_ZERO ;
+    char const *exclude[2] = { SS_LIVETREE_INIT, 0 } ;
 
     char ownerstr[UID_FMT] ;
     size_t ownerlen = uid_fmt(ownerstr,info->owner) ;
@@ -90,7 +91,7 @@ int all_doit(ssexec_t *info, unsigned int what, char const *const *envp)
 
     src[info->live.len + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len] = 0 ;
 
-    if (!sastr_dir_get(&salist,src,SS_LIVETREE_INIT,S_IFREG))
+    if (!sastr_dir_get(&salist,src,exclude,S_IFREG))
         log_dieusys(LOG_EXIT_SYS,"get contents of directory: ",src) ;
 
     if (salist.len)
@@ -164,6 +165,7 @@ void all_unsupervise(ssexec_t *info, char const *const *envp,int what)
     log_flow() ;
 
     size_t newlen = info->livetree.len + 1, pos = 0 ;
+    char const *exclude[1] = { 0 } ;
 
     char ownerstr[UID_FMT] ;
     size_t ownerlen = uid_fmt(ownerstr,info->owner) ;
@@ -188,7 +190,7 @@ void all_unsupervise(ssexec_t *info, char const *const *envp,int what)
         char livetree[newlen + info->treename.len + SS_SVDIRS_LEN + 1] ;
         auto_strings(livetree,info->livetree.s,"/",info->treename.s,SS_SVDIRS) ;
 
-        if (!sastr_dir_get(&salist,livetree,"",S_IFDIR)) log_dieusys(LOG_EXIT_SYS,"get service list at: ",livetree) ;
+        if (!sastr_dir_get(&salist,livetree,exclude,S_IFDIR)) log_dieusys(LOG_EXIT_SYS,"get service list at: ",livetree) ;
 
         livetree[newlen + info->treename.len] = 0 ;
 
@@ -327,9 +329,30 @@ int ssexec_all(int argc, char const *const *argv,char const *const *envp,ssexec_
 
         if (!auto_stra(&info->tree,contents.s + pos))
             log_die_nomem("stralloc") ;
-
-        r = tree_sethome(&info->tree,info->base.s,info->owner) ;
-        if (r < 0 || !r) log_dieusys(LOG_EXIT_SYS,"find tree: ", info->treename.s) ;
+        /**
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         * Attention ici avec le nouveau format de tree_sethome()
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         *
+         * */
+        r = tree_sethome(info) ;
+        if (r <= 0) 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) ;
-- 
GitLab