diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-02 09:15:57 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-02 09:15:57 +0000 |
| commit | bc45a9b93093162ce9e5e6d7451253ef321a304a (patch) | |
| tree | 478a6c232325b5996a73623549db750153b82bd8 | |
| parent | 3c56c74b8e0a45e07aac293d87313d0cbae39959 (diff) | |
| download | s6-rc-bc45a9b93093162ce9e5e6d7451253ef321a304a.tar.gz | |
s6rc_repo_sync error message fix; also allow overriding by later stores
| -rw-r--r-- | src/repo/s6rc_repo_sync.c | 30 |
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) ; } } } |
