From 1abc4f7387d16ee19a00b8e002701d514abb10ac Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Sun, 12 Mar 2023 01:47:47 +1100
Subject: [PATCH] create scandir if it not exist yet

---
 src/lib66/exec/ssexec_scandir_signal.c | 39 ++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/src/lib66/exec/ssexec_scandir_signal.c b/src/lib66/exec/ssexec_scandir_signal.c
index 42b75b28..e97f0324 100644
--- a/src/lib66/exec/ssexec_scandir_signal.c
+++ b/src/lib66/exec/ssexec_scandir_signal.c
@@ -18,6 +18,7 @@
 #include <oblibs/log.h>
 #include <oblibs/string.h>
 #include <oblibs/environ.h>
+#include <oblibs/types.h>
 
 #include <skalibs/types.h>
 #include <skalibs/bytestr.h>
@@ -168,9 +169,11 @@ static void scandir_up(char const *scandir, unsigned int timeout, unsigned int n
 
 int ssexec_scandir_signal(int argc, char const *const *argv, ssexec_t *info)
 {
+    log_flow() ;
+
     int r ;
 
-    unsigned int timeout = 0, notif = 0, sig = 0 ;
+    unsigned int timeout = 0, notif = 0, sig = 0, container = 0 ;
 
     char const *newenv[MAXENV+1] ;
     char const *const *genv = 0 ;
@@ -216,6 +219,12 @@ int ssexec_scandir_signal(int argc, char const *const *argv, ssexec_t *info)
 
                     break ;
 
+                case 'B' :
+
+                    container = 1 ;
+
+                    break ;
+
                 default :
 
                     log_usage(info->usage, "\n", info->help) ;
@@ -224,9 +233,6 @@ int ssexec_scandir_signal(int argc, char const *const *argv, ssexec_t *info)
         argc -= l.ind ; argv += l.ind ;
     }
 
-    if (argc < 1)
-        log_usage(info->usage, "\n", info->help) ;
-
     signal = argv[0] ;
 
     if (envdir.len) {
@@ -261,9 +267,32 @@ int ssexec_scandir_signal(int argc, char const *const *argv, ssexec_t *info)
         auto_strings(scandir, info->scandir.s) ;
 
         int r ;
+        r = scan_mode(scandir, S_IFDIR) ;
+        if (r < 0)
+           log_die(LOG_EXIT_SYS, scandir, " conflicted format") ;
+
+        if (!r) {
+
+            unsigned int m = 0 ;
+            int nargc = 3 + (container ? 1 : 0) ;
+            char const *newargv[nargc] ;
+
+            newargv[m++] = "create" ;
+
+            if (container)
+                newargv[m++] = "-B" ;
+
+            newargv[m++] = "create" ;
+            newargv[m] = 0 ;
+
+            if (ssexec_scandir_create(m, newargv, info))
+                log_dieu(LOG_EXIT_SYS, "create scandir: ", scandir) ;
+        }
+
         r = svc_scandir_ok(scandir) ;
         if (r < 0)
             log_dieusys(LOG_EXIT_SYS, "check: ", scandir) ;
+
         if (r) {
             log_trace("scandir: ", scandir, " already running") ;
             return 0 ;
@@ -282,7 +311,7 @@ int ssexec_scandir_signal(int argc, char const *const *argv, ssexec_t *info)
     else if (!r)
         log_diesys(LOG_EXIT_SYS, "scandir: ", info->scandir.s, " is not running") ;
 
-    if (send_signal(info->scandir.s,signal) <= 0)
+    if (send_signal(info->scandir.s, signal) <= 0)
         log_dieu(LOG_EXIT_SYS, "send signal to scandir: ", info->scandir.s) ;
 
     return 0 ;
-- 
GitLab