summaryrefslogtreecommitdiff
path: root/src/commands/mv.c
diff options
context:
space:
mode:
authorTyler Murphy <tylerm@tylerm.dev>2023-05-06 00:39:44 -0400
committerTyler Murphy <tylerm@tylerm.dev>2023-05-06 00:39:44 -0400
commitd8f2c10b7108fff6b7e437291093a1cadc15ab9f (patch)
tree3fc50a19d6fbb9c94a8fe147cd2a6c4ba7f59b8d /src/commands/mv.c
parentansii c (diff)
downloadlazysphere-d8f2c10b7108fff6b7e437291093a1cadc15ab9f.tar.gz
lazysphere-d8f2c10b7108fff6b7e437291093a1cadc15ab9f.tar.bz2
lazysphere-d8f2c10b7108fff6b7e437291093a1cadc15ab9f.zip
refactor
Diffstat (limited to 'src/commands/mv.c')
-rw-r--r--src/commands/mv.c116
1 files changed, 0 insertions, 116 deletions
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;
-}