master xplshn/aruu / cmd / posix / rmdir.c
 1/* See LICENSE file for copyright and license details. */
 2
 3#include <libgen.h>
 4#include <string.h>
 5#include <unistd.h>
 6
 7#include "util.h"
 8
 9static void
10usage(void)
11{
12  eprintf("usage: %s [-p] dir ...\n", argv0);
13}
14
15// ?man rmdir: remove empty directories
16// ?man arguments: dir ...
17// ?man remove empty directories from the filesystem
18int
19main(int argc, char *argv[])
20{
21  int   pflag = 0, ret = 0;
22  char *d;
23
24  ARGBEGIN
25  {
26    // ?man -p: remove parent directories if they are also empty
27    case 'p':
28      pflag = 1;
29      break;
30    default:
31      usage();
32  }
33  ARGEND
34
35  if (!argc)
36    usage();
37
38  for (; *argv; argc--, argv++) {
39    if (rmdir(*argv) < 0) {
40      weprintf("rmdir %s:", *argv);
41      ret = 1;
42    } else if (pflag) {
43      d = dirname(*argv);
44      for (; strcmp(d, "/") && strcmp(d, ".");) {
45        if (rmdir(d) < 0) {
46          weprintf("rmdir %s:", d);
47          ret = 1;
48          break;
49        }
50        d = dirname(d);
51      }
52    }
53  }
54
55  return ret;
56}