From 215614ec50d427f427750e647d0412a05d97345b Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Sat, 3 Aug 2019 08:53:52 -0400 Subject: clean up main loop, add diagnoses --- rmdir.c | 40 ++++++++++++++++++++++++---------------- 1 file 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 -#include +#define _XOPEN_SOURCE 500 +#include #include +#include #include +#include -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; } -- cgit v1.2.1