about summary refs log tree commit diff
path: root/src/instance/s6-instance-delete.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/instance/s6-instance-delete.c')
-rw-r--r--src/instance/s6-instance-delete.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/instance/s6-instance-delete.c b/src/instance/s6-instance-delete.c
index 37c345c..92078e0 100644
--- a/src/instance/s6-instance-delete.c
+++ b/src/instance/s6-instance-delete.c
@@ -21,6 +21,7 @@
 int main (int argc, char const *const *argv)
 {
   tain tto = TAIN_INFINITE_RELATIVE ;
+  size_t namelen ;
   uint32_t options = 1 ;
   PROG = "s6-instance-delete" ;
   {
@@ -42,7 +43,9 @@ int main (int argc, char const *const *argv)
   }
   if (argc < 2) dieusage() ;
   if (!argv[0][0]) strerr_dief1x(100, "invalid service path") ;
-  if (!argv[1][0] || argv[1][0] == '.' || byte_in(argv[1], strlen(argv[1]), " \t\f\r\n", 5) < strlen(argv[1]))
+
+  namelen = strlen(argv[1]) ;
+  if (!argv[1][0] || argv[1][0] == '.' || byte_in(argv[1], namelen, " \t\f\r\n", 5) < namelen)
     strerr_dief1x(100, "invalid instance name") ;
 
   tain_now_set_stopwatch_g() ;
@@ -50,11 +53,14 @@ int main (int argc, char const *const *argv)
 
   {
     size_t svlen = strlen(argv[0]) ;
-    char sc[svlen + 10] ;
+    char sc[svlen + 12 + namelen] ;
     memcpy(sc, argv[0], svlen) ;
     memcpy(sc + svlen, "/instance", 10) ;
     if (s6_supervise_unlink_names_g(sc, argv + 1, 1, options, &tto) == -1)
       strerr_diefu4sys(111, "prepare deletion of instance ", argv[1], " of service ", argv[0]) ;
+    memcpy(sc + svlen + 9, "s/", 2) ;
+    memcpy(sc + svlen + 11, argv[1], namelen + 1) ;
+    rm_rf(sc) ;
   }
 
   return 0 ;