From 55f5a1d0ba00ad8e15fadc391e4aa3960c9afdb3 Mon Sep 17 00:00:00 2001 From: Squibid Date: Wed, 3 May 2023 22:36:17 -0400 Subject: inital commit most of the current utils don't work --- rm.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 rm.c (limited to 'rm.c') diff --git a/rm.c b/rm.c new file mode 100644 index 0000000..e2c1dfc --- /dev/null +++ b/rm.c @@ -0,0 +1,67 @@ +#include +#include +#include + +/* TODO make a recursive flag */ + +int rm(char *fn, int frc, int ask, int expAsk); + +int +rm(char *fn, int frc, int ask, int prompt) +{ + FILE *f; + int sz; + char yn; + + /* get length of fn and check if it exists */ + if ((f = fopen(fn, "r"))) { + fseek(f, 0L, SEEK_END); + sz = ftell(f); + } else { + fprintf(stderr, "fn '%s' doesn't exist!\n", fn); + return 1; + } + + /* confirm deletion(s) when ask is on, and size is over 0 */ + if (prompt && !frc || (ask && sz > 0)) { + printf("Do you want to delete %s? ", fn); + yn = getchar(); + + if (yn == 'y') + remove(fn); + } else + remove(fn); + + return 0; +} + +int +main(int argc, char *argv[]) +{ + int ask = 1; /* confirm deletion */ + int prompt = 0; /* explicitly confirm deletion */ + int frc = 0; /* force deletion */ + int c; + + while ((c = getopt(argc, argv, "efh")) != -1) { + switch (c) { + case 'i': prompt = 1; break; + case 'f': frc = 1; ask = 0; break; + case 'h': goto usage; break; + default: printf("run %s -h for help\n", argv[0]); return 1; break; + } + } + + /* for each argument */ + for (int i = 1; i < argc; i++) { + if (strncmp(argv[i], "-", 1) == 0) /* ignore args that start with - */ + i++; + rm(argv[i], frc, ask, prompt); + } + + return 0; + +usage: + printf("Usage: %s -option(s) file(s)\n", argv[0]); + printf("\n\t-i prompt user for deletion of every file\n\t-f force deletion, does not ask for confirmation\n\t-h shows this help message\n"); +} -- cgit v1.2.1