From d8f2c10b7108fff6b7e437291093a1cadc15ab9f Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Sat, 6 May 2023 00:39:44 -0400 Subject: refactor --- src/commands/mv.c | 116 ------------------------------------------------------ 1 file changed, 116 deletions(-) delete mode 100644 src/commands/mv.c (limited to 'src/commands/mv.c') diff --git a/src/commands/mv.c b/src/commands/mv.c deleted file mode 100644 index d203607..0000000 --- a/src/commands/mv.c +++ /dev/null @@ -1,116 +0,0 @@ -#include "../command.h" - -static struct { - bool prompt; - bool dont_overwrite; - bool refuse_if_dir; - bool verbose; -} flags; - -static void help(void) { - printf("Usage: mv [-inT] SOURCE... DIRECTORY\n\n"); - printf("Rename SOURCE to DEST, or move SOURCEs to DIRECTORY\n"); - printf("\t-i\tInteractive, prompt before overwriting\n"); - printf("\t-n\tDon't overwrite an existing file\n"); - printf("\t-T\tRefuse to move if DEST is a directory\n"); - printf("\t-v\tVerbose\n"); -} - -static int short_arg(char c, char* next) { - UNUSED(next); - switch (c) { - case 't': - flags.prompt = true; - break; - case 'n': - flags.dont_overwrite = true; - break; - case 'T': - flags.refuse_if_dir = true; - break; - case 'v': - flags.verbose = true; - break; - default: - return ARG_UNUSED; - } - return ARG_USED; -} - -static void mv_dir(bool exists) { - - char c; - - if (exists && flags.dont_overwrite) { - if (flags.verbose) output("skipping '%s'; overwrise is false", get_path_buffer_2()); - return; - } - - if (exists && flags.prompt) { - fprintf(stderr, "overwrite '%s'? ", get_path_buffer_2()); - fflush(stderr); - - c = getchar(); - if (c != 'y' && c != 'Y') { - if (flags.verbose) output("skipping..."); - return; - } - - } - - if (rename(get_path_buffer(), get_path_buffer_2()) < 0) { - error_s("cannot move '%s': %s", get_path_buffer(), strerror(errno)); - } else if (flags.verbose) { - output("moved '%s'", get_path_buffer()); - } -} - -COMMAND(mv) { - - int start, dest, i; - struct stat s; - - flags.refuse_if_dir = false; - flags.dont_overwrite = false; - flags.prompt = false; - flags.verbose = false; - - start = parse_args(argc, argv, help, short_arg, NULL); - - if (argc - start < 2) { - global_help(help); - } - - push_path_buffer_2(argv[argc-1]); - - dest = true; - if (lstat(get_path_buffer_2(), &s) < 0 && argc - start > 2) { - dest = false; - error("cannot stat '%s': %s", get_path_buffer_2(), strerror(errno)); - } - - if (dest && flags.refuse_if_dir) { - if (S_ISDIR(s.st_mode)) { - error("target '%s': Is A Directory", get_path_buffer_2()); - } - } - - if (argc - start == 2) { - push_path_buffer(argv[argc-2]); - mv_dir(dest); - return EXIT_SUCCESS; - } - - if (dest && !S_ISDIR(s.st_mode)) { - error("target '%s': Is Not A Directory", get_path_buffer_2()); - } - - for (i = start; i < argc - 1; i++) { - int save = push_path_buffer(argv[i]); - bool exists = lstat(get_path_buffer(), &s) >= 0; - mv_dir(exists); - pop_path_buffer(save); - } - - return EXIT_SUCCESS; -} -- cgit v1.2.3-freya