From cded4c380d77c1e9f3fdc275c180ac09fe0d4f9a Mon Sep 17 00:00:00 2001
From: obarun <eric@obarun.org>
Date: Sun, 28 May 2023 16:30:12 +1100
Subject: [PATCH] create directory if it doesn't exist yet

---
 src/lib66/service/service_resolve_write.c | 27 +++++++++++------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/src/lib66/service/service_resolve_write.c b/src/lib66/service/service_resolve_write.c
index bf23ed4f..d0ff5e4a 100644
--- a/src/lib66/service/service_resolve_write.c
+++ b/src/lib66/service/service_resolve_write.c
@@ -18,36 +18,35 @@
 
 #include <oblibs/log.h>
 #include <oblibs/string.h>
+#include <oblibs/directory.h>
 
 #include <66/service.h>
 #include <66/resolve.h>
 #include <66/constants.h>
 
-int service_resolve_write(resolve_service_t *res)
+void service_resolve_write(resolve_service_t *res)
 {
     log_flow() ;
 
-    int e = 0 ;
     char *name = res->sa.s + res->name ;
     size_t namelen = strlen(name), homelen = strlen(res->sa.s + res->path.home) ;
-    char sym[homelen + SS_SYSTEM_LEN + SS_RESOLVE_LEN + SS_SERVICE_LEN + 1 + namelen + 1] ;
-    char dst[homelen + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + namelen + 1] ;
+    char dst[homelen + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + namelen + SS_RESOLVE_LEN + 1] ;
 
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, res) ;
 
-    auto_strings(sym, res->sa.s + res->path.home, SS_SYSTEM, SS_RESOLVE, SS_SERVICE, "/", name) ;
+    auto_strings(dst, res->sa.s + res->path.home, SS_SYSTEM, SS_SERVICE, SS_SVC, "/", name, SS_RESOLVE) ;
 
-    auto_strings(dst, res->sa.s + res->path.home, SS_SYSTEM, SS_SERVICE, SS_SVC, "/", name) ;
+    if (access(dst, F_OK) < 0) {
+        log_trace("create directory: ", dst) ;
+        if (!dir_create_parent(dst, 0755))
+            log_dieusys(LOG_EXIT_ZERO, "create directory: ", dst) ;
+    }
+
+    dst[homelen + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + namelen] = 0  ;
 
     log_trace("write resolve file: ",dst, SS_RESOLVE, "/", name) ;
     if (!resolve_write(wres, dst, name))
-        goto err ;
-
-    e = 1 ;
+        log_dieusys(LOG_EXIT_ZERO, "write resolve file: ", dst, SS_RESOLVE, "/", name) ;
 
-    err:
-        free(wres) ;
-        return e ;
+    free(wres) ;
 }
-
-
-- 
GitLab