aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_repo_sync.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-07-03 02:10:16 +0000
committerLaurent Bercot <ska@appnovation.com>2025-07-03 02:10:16 +0000
commitac8594589a19d7e6cfc03a0f2fc9f834a65e5241 (patch)
tree12dd1ba7bec8063262e42adf630e7096e670bb65 /src/libs6rc/s6rc_repo_sync.c
parent70e16828479e7d715b0fa235b5b0e26402fdc9f7 (diff)
downloads6-rc-ac8594589a19d7e6cfc03a0f2fc9f834a65e5241.tar.gz
s6-rc-set-new, refactors, additions, etc.
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libs6rc/s6rc_repo_sync.c')
-rw-r--r--src/libs6rc/s6rc_repo_sync.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/libs6rc/s6rc_repo_sync.c b/src/libs6rc/s6rc_repo_sync.c
index 963ec3c..1fb8d65 100644
--- a/src/libs6rc/s6rc_repo_sync.c
+++ b/src/libs6rc/s6rc_repo_sync.c
@@ -1,6 +1,5 @@
/* ISC license. */
-#include <skalibs/bsdsnowflake.h> /* stat */
#include <skalibs/nonposix.h> /* mkdtemp */
#include <string.h>
@@ -8,7 +7,6 @@
#include <stdlib.h>
#include <errno.h>
-#include <skalibs/stat.h>
#include <skalibs/direntry.h>
#include <skalibs/posixplz.h>
#include <skalibs/strerr.h>
@@ -16,6 +14,7 @@
#include <skalibs/djbunix.h>
#include <skalibs/unix-transactional.h>
+#include <s6-rc/s6rc-utils.h>
#include <s6-rc/repo.h>
static inline void cleanup (char const *fn)
@@ -57,25 +56,27 @@ int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sources
if (d->d_name[0] == '.') continue ;
len = strlen(d->d_name) ;
{
- struct stat st ;
char dst[repolen + 25 + len] ;
char src[srclen + len + 2] ;
memcpy(dst, newdir, repolen + 23) ;
dst[repolen + 23] = '/' ;
- memcpy(dst + repolen + 24, d->d_name, len + 1) ;
+ memcpy(dst + repolen + 24, d->d_name, len+1) ;
memcpy(src, sources[i], srclen) ;
src[srclen] = '/' ;
- memcpy(src + srclen + 1, d->d_name, len + 1) ;
- if (stat(src, &st) == -1)
+ memcpy(src + srclen + 1, d->d_name, len+1) ;
+ switch (s6rc_type_check(-1, src))
{
- if (verbosity) strerr_warnwu2sys("stat ", src) ;
- continue ;
- }
- if (!S_ISDIR(st.st_mode))
- {
- errno = ENOTDIR ;
- if (verbosity) strerr_warnwu2sys("link ", src) ;
- continue ;
+ case 1 :
+ case 2 :
+ case 3 : break ;
+ case 0 :
+ strerr_warnf2x("invalid service type for ", src) ;
+ dir_close(dir) ;
+ goto err ;
+ default :
+ strerr_warnfu2sys("check service type of ", src) ;
+ dir_close(dir) ;
+ goto err ;
}
if (symlink(src, dst) == -1)
{
@@ -110,6 +111,7 @@ int s6rc_repo_sync (char const *repo, char const *const *sources, size_t sources
if (chmod(newdir, 02755) == -1)
{
+ strerr_warnfu2sys("chmod ", newdir) ;
goto err ;
}