diff --git a/src/initctl.c b/src/initctl.c index 87192067..567d0ee7 100644 --- a/src/initctl.c +++ b/src/initctl.c @@ -681,9 +681,10 @@ static int usage(int rc) fprintf(stderr, " ls | list List all .conf in " FINIT_RCSD "\n" " create Create .conf in %s\n" + " delete Delete .conf in %s\n" " edit Edit .conf in %s\n" " touch Change .conf in %s\n", - avail, avail, avail); + avail, avail, avail, avail); if (has_ena) fprintf(stderr, " enable Enable .conf in %s\n", avail); @@ -750,6 +751,7 @@ int main(int argc, char *argv[]) { "touch", serv_touch }, { "edit", serv_edit }, { "create", serv_creat }, + { "delete", serv_delete }, { "reload", do_reload }, { "cond", do_cond }, diff --git a/src/serv.c b/src/serv.c index 362a6a55..2281b9ec 100644 --- a/src/serv.c +++ b/src/serv.c @@ -322,6 +322,29 @@ int serv_creat(char *arg) return fclose(fp); } +int serv_delete(char *arg) +{ + char buf[256]; + char *fn; + + if (!arg || !arg[0]) + errx(1, "missing argument to delete"); + + fn = conf(buf, sizeof(buf), arg, 0); + if (!fn) + errx(1, FINIT_RCSD " missing on system."); + + if (!fexist(fn)) + errx(1, "Cannot find %s", fn); + + if (yorn("Remove %s and any enabled symlink (y/N)? ", fn)) { + serv_disable(arg); + remove(fn); + } + + return 0; +} + /** * Local Variables: * indent-tabs-mode: t diff --git a/src/serv.h b/src/serv.h index be9febd4..a93b0ffe 100644 --- a/src/serv.h +++ b/src/serv.h @@ -30,6 +30,7 @@ int serv_disable (char *arg); int serv_touch (char *arg); int serv_edit (char *arg); int serv_creat (char *arg); +int serv_delete (char *arg); #endif /* FINIT_SERV_H_ */