diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-08-03 08:53:52 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-08-03 08:53:52 -0400 |
commit | 215614ec50d427f427750e647d0412a05d97345b (patch) | |
tree | 8598d4700c09c6b770b7c36631243064e1044cac | |
parent | 79734f12b2f849bb1ff1f1e2ff3aa448d1f273db (diff) |
clean up main loop, add diagnoses
-rw-r--r-- | rmdir.c | 40 |
1 files changed, 24 insertions, 16 deletions
@@ -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; } |