From bc45a9b93093162ce9e5e6d7451253ef321a304a Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 2 Feb 2026 09:15:57 +0000 Subject: s6rc_repo_sync error message fix; also allow overriding by later stores --- src/repo/s6rc_repo_sync.c | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) (limited to 'src') 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) ; } } } -- cgit v1.3.1