diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-08-04 01:33:49 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-08-04 01:33:49 +0000 |
| commit | 78977a1a98d2154e42eab788d6420b3c52464413 (patch) | |
| tree | e9f8399dfda6c59f2b94964ccc2b266074e821e6 /src/repo/s6-rc-set-delete.c | |
| parent | 55131f86090252400176f09e047f17b7110854c8 (diff) | |
| download | s6-rc-78977a1a98d2154e42eab788d6420b3c52464413.tar.gz | |
first draft of s6rc_repo_set_compile
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/repo/s6-rc-set-delete.c')
| -rw-r--r-- | src/repo/s6-rc-set-delete.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/repo/s6-rc-set-delete.c b/src/repo/s6-rc-set-delete.c index e45561f..58fe4f0 100644 --- a/src/repo/s6-rc-set-delete.c +++ b/src/repo/s6-rc-set-delete.c @@ -29,7 +29,19 @@ static inline void dodelete (char const *repo, char const *setname) if (errno != ENOENT) strerr_diefu2sys(111, "access ", fn) ; else strerr_warnwu2sys("delete set ", setname) ; } - else rm_rf(fn) ; + else + { + ssize_t r ; + char real[repolen + setlen + 18] ; + memcpy(real, repo, repolen) ; + memcpy(real + repolen, "/sources/", 9) ; + r = readlink(fn, real + repolen + 9, setlen + 9) ; + if (r == -1) strerr_diefu2sys(111, "readlink ", fn) ; + else if (r != 8) strerr_dief3x(102, "symlink ", fn, " points to an invalid name") ; + real[repolen + setlen + 17] = 0 ; + if (unlink(fn) == -1) strerr_diefu2sys(111, "unlink ", fn) ; + rm_rf(real) ; + } } enum gola_e |
