aboutsummaryrefslogtreecommitdiffstats
path: root/src/repo/s6-rc-set-delete.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-08-04 01:33:49 +0000
committerLaurent Bercot <ska@appnovation.com>2025-08-04 01:33:49 +0000
commit78977a1a98d2154e42eab788d6420b3c52464413 (patch)
treee9f8399dfda6c59f2b94964ccc2b266074e821e6 /src/repo/s6-rc-set-delete.c
parent55131f86090252400176f09e047f17b7110854c8 (diff)
downloads6-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.c14
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