diff options
Diffstat (limited to 'rmdir.c')
-rw-r--r-- | rmdir.c | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/rmdir.c b/rmdir.c deleted file mode 100644 index cac27cac9..000000000 --- a/rmdir.c +++ /dev/null | |||
@@ -1,97 +0,0 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
2 | /* | ||
3 | * Mini rmdir implementation for busybox | ||
4 | * | ||
5 | * | ||
6 | * Copyright (C) 1999,2000,2001 by Lineo, inc. | ||
7 | * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
17 | * General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #include <getopt.h> | ||
26 | #include <unistd.h> | ||
27 | #include <stdlib.h> | ||
28 | |||
29 | #include "busybox.h" | ||
30 | |||
31 | |||
32 | /* Return true if a path is composed of multiple components. */ | ||
33 | |||
34 | static int | ||
35 | multiple_components_p (const char *path) | ||
36 | { | ||
37 | const char *s = path; | ||
38 | |||
39 | while (s[0] != '\0' && s[0] != '/') | ||
40 | s++; | ||
41 | |||
42 | while (s[0] == '/') | ||
43 | s++; | ||
44 | |||
45 | return (s[0] != '\0'); | ||
46 | } | ||
47 | |||
48 | |||
49 | /* Remove a directory. Returns 0 if successful, -1 on error. */ | ||
50 | |||
51 | static int | ||
52 | remove_directory (char *path, int flags) | ||
53 | { | ||
54 | if (!(flags & FILEUTILS_RECUR)) { | ||
55 | if (rmdir (path) < 0) { | ||
56 | perror_msg ("unable to remove `%s'", path); | ||
57 | return -1; | ||
58 | } | ||
59 | } else { | ||
60 | if (remove_directory (path, 0) < 0) | ||
61 | return -1; | ||
62 | |||
63 | if (multiple_components_p (path)) | ||
64 | if (remove_directory (dirname (path), flags) < 0) | ||
65 | return -1; | ||
66 | } | ||
67 | |||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | |||
72 | extern int | ||
73 | rmdir_main (int argc, char **argv) | ||
74 | { | ||
75 | int status = EXIT_SUCCESS; | ||
76 | int flags = 0; | ||
77 | int i, opt; | ||
78 | |||
79 | while ((opt = getopt (argc, argv, "p")) != -1) | ||
80 | switch (opt) { | ||
81 | case 'p': | ||
82 | flags |= FILEUTILS_RECUR; | ||
83 | break; | ||
84 | |||
85 | default: | ||
86 | show_usage (); | ||
87 | } | ||
88 | |||
89 | if (optind == argc) | ||
90 | show_usage(); | ||
91 | |||
92 | for (i = optind; i < argc; i++) | ||
93 | if (remove_directory (argv[i], flags) < 0) | ||
94 | status = EXIT_FAILURE; | ||
95 | |||
96 | return status; | ||
97 | } | ||