aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-02-02 09:15:57 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-02-02 09:15:57 +0000
commitbc45a9b93093162ce9e5e6d7451253ef321a304a (patch)
tree478a6c232325b5996a73623549db750153b82bd8
parent3c56c74b8e0a45e07aac293d87313d0cbae39959 (diff)
downloads6-rc-bc45a9b93093162ce9e5e6d7451253ef321a304a.tar.gz
s6rc_repo_sync error message fix; also allow overriding by later stores
-rw-r--r--src/repo/s6rc_repo_sync.c30
1 files changed, 11 insertions, 19 deletions
diff --git a/src/repo/s6rc_repo_sync.c b/src/repo/s6rc_repo_sync.c
index d14e86f..350f34d 100644
--- a/src/repo/s6rc_repo_sync.c
+++ b/src/repo/s6rc_repo_sync.c
@@ -99,7 +99,9 @@ int s6rc_repo_sync (char const *repo, unsigned int verbosity, char const *fdhuse
char const *x ;
char dst[repolen + 27 + len] ;
char src[19 + len] ;
+ char oldsrc[19 + len] ;
char fn[repolen + 14 + len] ;
+ oldsrc[0] = 0 ;
memcpy(src, "../../stores/", 13) ;
memcpy(src + 13, store + repolen + 8, 4) ;
src[17] = '/' ;
@@ -124,26 +126,16 @@ int s6rc_repo_sync (char const *repo, unsigned int verbosity, char const *fdhuse
memcpy(dst, x, repolen + 25) ;
dst[repolen + 25] = '/' ;
memcpy(dst + repolen + 26, d->d_name, len+1) ;
- if (symlink(src, dst) == -1)
+ if (!atomic_symlink4(src, dst, oldsrc, 19 + len))
{
- if (errno != EEXIST)
- {
- strerr_warnfu4sys("symlink ", src, " to ", dst) ;
- dir_close(dir) ;
- goto err ;
- }
- if (verbosity)
- {
- if (!sareadlink(&satmp, dst) || !stralloc_0(&satmp))
- {
- strerr_warnwu2sys("readlink ", dst) ;
- errno = EEXIST ;
- strerr_warnwu4sys("symlink ", src, " to ", dst) ;
- }
- else
- strerr_warnwu6x("symlink ", src, " to ", dst, ": already provided by ", satmp.s) ;
- satmp.len = 0 ;
- }
+ strerr_warnfu4sys("symlink ", src, " to ", dst) ;
+ dir_close(dir) ;
+ goto err ;
+ }
+ if (oldsrc[0] && verbosity)
+ {
+ oldsrc[17] = 0 ;
+ strerr_warnw6x("service ", d->d_name, " provided in store ", oldsrc + 13, "; overridden by new definition in store ", store + repolen + 8) ;
}
}
}