summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2019-08-03 08:53:52 -0400
committerJakob Kaivo <jkk@ung.org>2019-08-03 08:53:52 -0400
commit215614ec50d427f427750e647d0412a05d97345b (patch)
tree8598d4700c09c6b770b7c36631243064e1044cac
parent79734f12b2f849bb1ff1f1e2ff3aa448d1f273db (diff)
clean up main loop, add diagnoses
-rw-r--r--rmdir.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/rmdir.c b/rmdir.c
index 4b79154..ebe5298 100644
--- a/rmdir.c
+++ b/rmdir.c
@@ -22,45 +22,53 @@
* SOFTWARE.
*/
-#include <stdio.h>
-#include <unistd.h>
+#define _XOPEN_SOURCE 500
+#include <errno.h>
#include <libgen.h>
+#include <stdio.h>
#include <string.h>
+#include <unistd.h>
-const char *rmdir_desc = "remove directories";
-const char *rmdir_inv = "rmdir [-p] dir...";
-
-int main(int argc, char **argv)
+int main(int argc, char *argv[])
{
- int c;
int prune = 0;
- int retval = 0;
- while ((c = getopt(argc, argv, ":p")) != -1) {
+ int c;
+ while ((c = getopt(argc, argv, "p")) != -1) {
switch (c) {
case 'p':
prune = 1;
break;
+
default:
return 1;
}
}
- if (optind >= argc)
+ if (optind >= argc) {
return 1;
+ }
- while (optind < argc) {
+ int retval = 0;
+ do {
if (prune) {
char *working = argv[optind];
while (strcmp(working, ".") && strcmp(working, "/")) {
- retval = rmdir(working);
+ if (rmdir(working) != 0) {
+ fprintf(stderr, "rmdir: %s: %s\n",
+ working, strerror(errno));
+ retval = 1;
+ break;
+ }
working = dirname(working);
}
- } else {
- retval = rmdir(argv[optind]);
+
+ } else if (rmdir(argv[optind]) != 0) {
+ fprintf(stderr, "rmdir: %s: %s\n", argv[optind],
+ strerror(errno));
+ retval = 1;
}
- optind++;
- }
+ } while (++optind < argc);
return retval;
}