From cd1abee536ee7ffbed089a4542c7e9e6a4cdd19b Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Sun, 5 Dec 2021 17:24:10 +1100
Subject: [PATCH] pass through auto_strings function

---
 src/lib66/backup_cmd_switcher.c    | 68 +++++++++++-------------------
 src/lib66/backup_make_new.c        | 50 +++++++++-------------
 src/lib66/backup_realpath_sym.c    | 27 ++++++------
 src/lib66/db_compile.c             | 15 ++-----
 src/lib66/db_find_compiled_state.c | 14 +++---
 src/lib66/db_ok.c                  | 12 +++---
 src/lib66/db_switch_to.c           |  7 ++-
 src/lib66/db_update.c              | 11 +----
 8 files changed, 76 insertions(+), 128 deletions(-)

diff --git a/src/lib66/backup_cmd_switcher.c b/src/lib66/backup_cmd_switcher.c
index bd1bfbe6..e16c5f92 100644
--- a/src/lib66/backup_cmd_switcher.c
+++ b/src/lib66/backup_cmd_switcher.c
@@ -80,28 +80,20 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
     //base.len-- ;
     size_t psymlen ;
     char *psym = NULL ;
-    if (type == TYPE_CLASSIC)
-    {
+    if (type == TYPE_CLASSIC) {
         psym = SS_SYM_SVC ;
         psymlen = SS_SYM_SVC_LEN ;
-    }
-    else
-    {
+
+    } else {
         psym = SS_SYM_DB ;
         psymlen = SS_SYM_DB_LEN ;
     }
+
     char sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 + psymlen + 1] ;
-    memcpy(sym,info->base.s,info->base.len) ;
-    memcpy(sym + info->base.len, SS_SYSTEM,SS_SYSTEM_LEN) ;
-    sym[info->base.len + SS_SYSTEM_LEN] = '/' ;
-    memcpy(sym + info->base.len + SS_SYSTEM_LEN + 1, tree, treelen) ;
-    memcpy(sym + info->base.len + SS_SYSTEM_LEN + 1 + treelen, SS_SVDIRS, SS_SVDIRS_LEN) ;
-    sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN] = '/' ;
-    memcpy(sym + info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 ,psym,psymlen) ;
-    sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 + psymlen] = 0 ;
-
-    if (back)
-    {
+    auto_strings(sym, info->base.s, SS_SYSTEM, "/", tree, SS_SVDIRS, "/", psym) ;
+
+    if (back) {
+
         if(lstat(sym,&st) < 0) return -1 ;
         if(!(S_ISLNK(st.st_mode)))
             log_warnusys_return(LOG_EXIT_LESSONE,"find symlink: ",sym) ;
@@ -122,23 +114,22 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
         return SS_SWBACK ;
     }
 
-    if (change)
-    {
+    if (change) {
+
         size_t psrclen ;
         size_t pbacklen ;
         char *psrc = NULL ;
         char *pback = NULL ;
 
-        if (type == TYPE_CLASSIC)
-        {
+        if (type == TYPE_CLASSIC) {
             psrc = SS_SVC ;
             psrclen = SS_SVC_LEN ;
 
             pback = SS_SVC ;
             pbacklen = SS_SVC_LEN ;
-        }
-        else
-        {
+
+        } else {
+
             psrc = SS_DB ;
             psrclen = SS_DB_LEN ;
 
@@ -149,29 +140,18 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
         char dstsrc[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + psrclen + 1] ;
         char dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen + pbacklen + 1] ;
 
-        memcpy(dstsrc, info->base.s, info->base.len) ;
-        memcpy(dstsrc + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
-        dstsrc[info->base.len + SS_SYSTEM_LEN] = '/' ;
-        memcpy(dstsrc + info->base.len + SS_SYSTEM_LEN + 1, tree, treelen) ;
-        memcpy(dstsrc + info->base.len + SS_SYSTEM_LEN + 1 + treelen, SS_SVDIRS,SS_SVDIRS_LEN) ;
-        memcpy(dstsrc + info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN,psrc,psrclen) ;
-        dstsrc[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + psrclen] = 0 ;
-
-        memcpy(dstback, info->base.s, info->base.len) ;
-        memcpy(dstback + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
-        memcpy(dstback + info->base.len + SS_SYSTEM_LEN, SS_BACKUP, strlen(SS_BACKUP)) ;
-        dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN] = '/' ;
-        memcpy(dstback + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1, tree, treelen) ;
-        memcpy(dstback + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen, pback,pbacklen) ;
-        dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen + pbacklen] = 0 ;
-
-        if (what)
-        {
+        auto_strings(dstsrc, info->base.s, SS_SYSTEM, "/", tree, SS_SVDIRS, psrc) ;
+
+        auto_strings(dstback, info->base.s, SS_SYSTEM, SS_BACKUP, "/", tree, pback) ;
+
+        if (what) {
+
             if (!atomic_symlink(dstback, sym,"backup_switcher"))
                 log_warnusys_return(LOG_EXIT_LESSONE,"symlink: ", dstback) ;
         }
-        if (!what)
-        {
+
+        if (!what) {
+
             if (!atomic_symlink(dstsrc, sym,"backup_switcher"))
                 log_warnusys_return(LOG_EXIT_LESSONE,"symlink: ", dstsrc) ;
         }
@@ -201,7 +181,7 @@ int backup_cmd_switcher(unsigned int verbosity,char const *cmd,ssexec_t *info)
     newargv[m++] = "-v" ;
     newargv[m++] = fmt ;
 
-    for (;pos < opts.len; pos += strlen(opts.s + pos) + 1)
+    FOREACH_SASTR(&opts, pos)
         newargv[m++] = opts.s + pos ;
 
     newargv[m++] = info->treename.s ;
diff --git a/src/lib66/backup_make_new.c b/src/lib66/backup_make_new.c
index 355a2891..c67b9a5d 100644
--- a/src/lib66/backup_make_new.c
+++ b/src/lib66/backup_make_new.c
@@ -35,57 +35,45 @@ int backup_make_new(ssexec_t *info, unsigned int type)
 
     int r ;
 
-    size_t newsrc ;
-    size_t newback ;
-    size_t typelen ;
+    size_t newsrc, newback, typelen ;
     char *ptype = NULL ;
 
-    if (type == TYPE_CLASSIC)
-    {
+    if (type == TYPE_CLASSIC) {
+
         ptype = SS_SVC ;
         typelen = SS_SVC_LEN ;
-    }
-    else
-    {
+
+    } else {
+
         ptype = SS_DB ;
         typelen = SS_DB_LEN ;
     }
 
     char src[info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN + SS_RESOLVE_LEN + 1] ;
-    memcpy(src,info->base.s,info->base.len) ;
-    memcpy(src + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
-    src[info->base.len + SS_SYSTEM_LEN] = '/' ;
-    memcpy(src + info->base.len + SS_SYSTEM_LEN + 1,info->treename.s,info->treename.len) ;
-    memcpy(src+ info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len,SS_SVDIRS, SS_SVDIRS_LEN) ;
+    auto_strings(src, info->base.s, SS_SYSTEM, "/", info->treename.s, SS_SVDIRS, ptype)
     newsrc = info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN ;
-    memcpy(src+ info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN, ptype,typelen) ;
-    src[info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN +  typelen] = 0 ;
 
     char back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len + SS_RESOLVE_LEN + 1] ;
-    memcpy(back, info->base.s, info->base.len) ;
-    memcpy(back + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
-    memcpy(back + info->base.len + SS_SYSTEM_LEN, SS_BACKUP, SS_BACKUP_LEN) ;
-    back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN] = '/' ;
-    memcpy(back + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1, info->treename.s, info->treename.len) ;
+    auto_strings(back, info->base.s, SS_SYSTEM, SS_BACKUP, "/", info->treename.s, ptype) ;
     newback = info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len ;
-    memcpy(back + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len, ptype,typelen) ;
-    back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len + typelen] = 0 ;
 
     r = scan_mode(back,S_IFDIR) ;
-    if (r || (r < 0))
-    {
+    if (r || (r < 0)) {
+
         log_trace("rm directory: ", back) ;
         if (rm_rf(back) < 0)
             log_warnusys_return(LOG_EXIT_ZERO,"remove: ",back) ;
 
         r = 0 ;
     }
-    if (!r)
-    {
+
+    if (!r) {
+
         log_trace("create directory: ", back) ;
         if (!dir_create(back,0755))
             log_warnusys_return(LOG_EXIT_ZERO,"create directory: ",back) ;
     }
+
     log_trace("copy: ",src," to: ", back) ;
     if (!hiercopy(src, back))
         log_warnusys_return(LOG_EXIT_ZERO,"copy: ",src," to ",back) ;
@@ -97,20 +85,22 @@ int backup_make_new(ssexec_t *info, unsigned int type)
     back[newback + SS_RESOLVE_LEN] = 0 ;
 
     r = scan_mode(back,S_IFDIR) ;
-    if (r || (r < 0))
-    {
+    if (r || (r < 0)) {
+
         log_trace("rm directory: ", back) ;
         if (rm_rf(back) < 0)
             log_warnusys_return(LOG_EXIT_ZERO,"remove: ",back) ;
 
         r = 0 ;
     }
-    if (!r)
-    {
+
+    if (!r) {
+
         log_trace("create directory: ", back) ;
         if (!dir_create(back,0755))
             log_warnusys_return(LOG_EXIT_ZERO,"create directory: ",back) ;
     }
+
     log_trace("copy: ",src," to: ", back) ;
     if (!hiercopy(src, back))
         log_warnusys_return(LOG_EXIT_ZERO,"copy: ",src," to ",back) ;
diff --git a/src/lib66/backup_realpath_sym.c b/src/lib66/backup_realpath_sym.c
index 84d9c2a2..72eea70d 100644
--- a/src/lib66/backup_realpath_sym.c
+++ b/src/lib66/backup_realpath_sym.c
@@ -35,31 +35,30 @@ int backup_realpath_sym(stralloc *sa, ssexec_t *info,unsigned int type)
     size_t typelen ;
     char *ptype = 0 ;
 
-    if (type == TYPE_CLASSIC)
-    {
+    if (type == TYPE_CLASSIC) {
         ptype = SS_SYM_SVC ;
         typelen = SS_SYM_SVC_LEN;
-    }
-    else
-    {
+
+    } else {
+
         ptype = SS_SYM_DB ;
         typelen = SS_SYM_DB_LEN;
     }
 
     char sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen + 1] ;
-    memcpy(sym,info->tree.s,info->tree.len) ;
-    memcpy(sym + info->tree.len, SS_SVDIRS, SS_SVDIRS_LEN) ;
-    sym[info->tree.len + SS_SVDIRS_LEN] = '/' ;
-    memcpy(sym + info->tree.len + SS_SVDIRS_LEN + 1, ptype,typelen) ;
-    sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen] = '/' ;
-    sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen + 1] = 0 ;
+    auto_strings(sym, info->tree.s, SS_SVDIRS, "/", ptype, "/") ;
 
     r = scan_mode(sym,S_IFDIR) ;
-    if(r <= 0) return 0 ;
+    if(r <= 0)
+        return 0 ;
+
     sa->len = 0 ;
     r = sarealpath(sa,sym) ;
-    if (r == -1 ) return 0 ;
-    if (!stralloc_0(sa)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
+    if (r == -1 )
+        return 0 ;
+
+    if (!stralloc_0(sa))
+        log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
 
     return 1 ;
 }
diff --git a/src/lib66/db_compile.c b/src/lib66/db_compile.c
index 5d1db77d..9488f412 100644
--- a/src/lib66/db_compile.c
+++ b/src/lib66/db_compile.c
@@ -39,21 +39,14 @@ int db_compile(char const *workdir, char const *tree, char const *treename, char
     size_t wlen = strlen(workdir), treelen = strlen(treename) ;
 
     char dest[wlen + SS_DB_LEN + 1 + treelen + 1] ;
-    memcpy(dest,workdir,wlen) ;
-    memcpy(dest + wlen,SS_DB,SS_DB_LEN) ;
-    dest[wlen + SS_DB_LEN] = '/' ;
-    memcpy(dest + wlen + SS_DB_LEN + 1,treename,treelen) ;
-    dest[wlen + SS_DB_LEN + 1 + treelen] = 0 ;
+    auto_strings(dest, workdir, SS_DB, "/", treename) ;
 
     char src[wlen + SS_DB_LEN + SS_SRC_LEN + 1] ;
-    memcpy(src,workdir,wlen) ;
-    memcpy(src + wlen,SS_DB,SS_DB_LEN) ;
-    memcpy(src + wlen + SS_DB_LEN,SS_SRC,SS_SRC_LEN) ;
-    src[wlen + SS_DB_LEN + SS_SRC_LEN] = 0 ;
+    auto_strings(src, workdir, SS_DB, SS_SRC)
 
     r = scan_mode(dest,S_IFDIR) ;
-    if (r)
-    {
+    if (r) {
+
         if (rm_rf(dest) < 0)
             log_warnusys_return(LOG_EXIT_ZERO,"remove: ", dest) ;
     }
diff --git a/src/lib66/db_find_compiled_state.c b/src/lib66/db_find_compiled_state.c
index 42a4a55d..c19d3ed9 100644
--- a/src/lib66/db_find_compiled_state.c
+++ b/src/lib66/db_find_compiled_state.c
@@ -31,17 +31,12 @@ int db_find_compiled_state(char const *livetree, char const *treename)
     log_flow() ;
 
     int r ;
-    size_t treelen = strlen(livetree) ;
-    size_t namelen = strlen(treename) ;
+    size_t treelen = strlen(livetree), namelen = strlen(treename) ;
 
     struct stat st ;
 
     char current[treelen + 1 + namelen + 9 + 1] ;
-    memcpy(current, livetree, treelen) ;
-    current[treelen] = '/' ;
-    memcpy(current + treelen + 1, treename,namelen) ;
-    memcpy(current + treelen + 1 + namelen, "/compiled", 9) ;
-    current[treelen + 1 + namelen + 9] = 0 ;
+    auto_strings(current, livetree, "/", treename, "/compiled") ;
 
     if(lstat(current,&st) < 0) return -1 ;
     if(!(S_ISLNK(st.st_mode)))
@@ -50,11 +45,12 @@ int db_find_compiled_state(char const *livetree, char const *treename)
     stralloc symreal = STRALLOC_ZERO ;
 
     r = sarealpath(&symreal,current) ;
-    if (r < 0 )
-    {
+    if (r < 0 ) {
+
         stralloc_free(&symreal) ;
         log_warnu_return(LOG_EXIT_LESSONE,"find real path: ",current) ;
     }
+
     char *b = NULL ;
     b = memmem(symreal.s,symreal.len,SS_BACKUP,SS_BACKUP_LEN) ;
 
diff --git a/src/lib66/db_ok.c b/src/lib66/db_ok.c
index 53b97c73..11c9aa35 100644
--- a/src/lib66/db_ok.c
+++ b/src/lib66/db_ok.c
@@ -24,18 +24,16 @@ int db_ok(char const *livetree, char const *treename)
 {
     log_flow() ;
 
-    size_t treelen = strlen(livetree) ;
-    size_t namelen = strlen(treename) ;
+    size_t treelen = strlen(livetree), namelen = strlen(treename) ;
 
     struct stat st ;
 
     char sym[treelen + 1 + namelen + 1] ;
-    memcpy(sym, livetree, treelen) ;
-    sym[treelen] = '/' ;
-    memcpy(sym + treelen + 1, treename,namelen) ;
-    sym[treelen + 1 + namelen] = 0 ;
+    auto_strings(sym, livetree, "/", treename) ;
+
+    if(lstat(sym,&st) < 0)
+        return 0 ;
 
-    if(lstat(sym,&st) < 0) return 0 ;
     if(!(S_ISLNK(st.st_mode)))
         return 0 ;
 
diff --git a/src/lib66/db_switch_to.c b/src/lib66/db_switch_to.c
index f181eb91..5c37a094 100644
--- a/src/lib66/db_switch_to.c
+++ b/src/lib66/db_switch_to.c
@@ -33,7 +33,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
 {
     log_flow() ;
 
-    int r ;
+    int r, e = 0 ;
 
     stralloc db = STRALLOC_ZERO ;
     char type[UINT_FMT] ;
@@ -135,10 +135,9 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
         }
     }
 
-    stralloc_free(&db) ;
-    return 1 ;
+    e = 1 ;
 
     err:
         stralloc_free(&db) ;
-        return 0 ;
+        return e ;
 }
diff --git a/src/lib66/db_update.c b/src/lib66/db_update.c
index a9a530c4..4d568bc9 100644
--- a/src/lib66/db_update.c
+++ b/src/lib66/db_update.c
@@ -35,18 +35,11 @@ int db_update(char const *newdb, ssexec_t *info,char const *const *envp)
     int wstat ;
     size_t newdblen = strlen(newdb) ;
 
-
     char db[newdblen + 1 + info->treename.len + 1] ;
-    memcpy(db, newdb, newdblen) ;
-    memcpy(db + newdblen, "/", 1) ;
-    memcpy(db + newdblen + 1, info->treename.s, info->treename.len) ;
-    db[newdblen + 1 + info->treename.len] = 0 ;
+    auto_strings(db, newdb, "/", info->treename.s) ;
 
     char newlive[info->livetree.len + 1 + info->treename.len + 1] ;
-    memcpy(newlive, info->livetree.s,info->livetree.len) ;
-    memcpy(newlive + info->livetree.len , "/", 1) ;
-    memcpy(newlive + info->livetree.len + 1, info->treename.s,info->treename.len) ;
-    newlive[info->livetree.len + 1 + info->treename.len] = 0 ;
+    auto_strings(newlive, info->livetree.s, "/", info->treename.s) ;
 
     char const *newargv[10] ;
     unsigned int m = 0 ;
-- 
GitLab