diff options
-rwxr-xr-x | scripts/test/rmdir.test | 45 | ||||
-rw-r--r-- | toys/rmdir.c | 43 |
2 files changed, 88 insertions, 0 deletions
diff --git a/scripts/test/rmdir.test b/scripts/test/rmdir.test new file mode 100755 index 00000000..9ca7d59e --- /dev/null +++ b/scripts/test/rmdir.test @@ -0,0 +1,45 @@ +#!/bin/bash + +[ -f testing.sh ] && . testing.sh + +#testing "name" "command" "result" "infile" "stdin" + +mkdir one +testing "rmdir" "rmdir one && [ ! -d walrus ] && echo yes" "yes\n" "" "" + +touch walrus +testing "rmdir file" \ + "rmdir walrus 2> /dev/null || [ -f walrus ] && echo yes" "yes\n" "" "" + +mkdir one two +testing "rmdir one two" \ + "rmdir one two 2> /dev/null && [ ! -d one ] && [ ! -d two ] && echo yes" \ + "yes\n" "" "" + +mkdir one two three +testing "rmdir one missing two file three" \ + "rmdir one missing two walrus three 2> /dev/null || [ ! -d three ] && echo yes" \ + "yes\n" "" "" + +mkdir one +chmod 000 one +testing "rmdir mode 000" "rmdir one && [ ! -d one ] && echo yes" "yes\n" "" "" + +mkdir temp +touch temp/thing +testing "rmdir non-empty" \ + "rmdir temp 2>/dev/null || [ -d temp ] && echo yes" "yes\n" "" "" +testing "rmdir -p dir/file" \ + "rmdir -p temp/thing 2>/dev/null || [ -f temp/thing ] && echo yes" \ + "yes\n" "" "" + +mkdir -p temp/one/two/three +testing "rmdir -p part of path" \ + "rmdir -p temp/one/two/three 2>/dev/null || [ -d temp ] && [ ! -e temp/one ] && echo yes" \ + "yes\n" "" "" +rm -rf temp + +mkdir -p one/two/three +testing "rmdir -p one/two/three" \ + "rmdir -p one/two/three && [ ! -e one ] && echo yes" "yes\n" "" "" +rm walrus diff --git a/toys/rmdir.c b/toys/rmdir.c new file mode 100644 index 00000000..2368255b --- /dev/null +++ b/toys/rmdir.c @@ -0,0 +1,43 @@ +/* vi: set sw=4 ts=4: + * + * hello.c - A hello world program. + * + * Copyright 2006 Rob Landley <rob@landley.net> + * + * See http://www.opengroup.org/onlinepubs/009695399/utilities/cat.html + +USE_RMDIR(NEWTOY(rmdir, "<1p", TOYFLAG_BIN)) + +config RMDIR + bool "rmdir" + default y + help + usage: rmdir [-p] [dirname...] + Remove one or more directories. + + -p Remove path. +*/ + +#include "toys.h" + +static void do_rmdir(char *name) +{ + for (;;) { + char *temp; + + if (rmdir(name)) { + perror_msg("%s",name); + return; + } + if (!toys.optflags) return; + if (!(temp=strrchr(name,'/'))) return; + *temp=0; + } +} + +void rmdir_main(void) +{ + char **s; + + for (s=toys.optargs; *s; s++) do_rmdir(*s); +} |