From 140457e4b723f419ff6481f97cf2f766f871bac2 Mon Sep 17 00:00:00 2001 From: nova Date: Mon, 13 Oct 2025 22:47:38 +0200 Subject: [PATCH] fixed copy/paste --- interactions.c | 51 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/interactions.c b/interactions.c index 287e0d8..158f3af 100644 --- a/interactions.c +++ b/interactions.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -751,12 +752,13 @@ void yank_file(unsigned long passes, int index){ unsigned long i; if (yank_files.status & YANK_IS_USED) { - free(yank_files.path); for (i = 0; i < yank_files.count; i++) { free(yank_files.list[i]); } free(yank_files.list); + free(yank_files.path); yank_files.count = 0; + yank_files.status = 0; } yank_files.path=getcwd(NULL, 0); yank_files.count = 0; @@ -773,7 +775,7 @@ void yank_file(unsigned long passes, int index){ strcpy(*yank_files.list, mid_content[selected_file_current].file_name); } else { yank_files.list = malloc(yank_files.count * sizeof(char*)); - for (i = 0; i < mid_file_count && i < yank_files.count; i++) { + for (i = 0; i < mid_file_count; i++) { if (mid_content[i].status & FILE_STATUS_SELECTED) { *yank_files.list = malloc(strlen(mid_content[i].file_name)+1); strcpy(*yank_files.list, mid_content[i].file_name); @@ -797,32 +799,41 @@ void paste(){ /*TODO(2025-08-14T22:10:44) escape path*/ char *cmd; if (yank_files.status & YANK_COPY) { - cmd = concat("false | cp -r -i ", yank_files.path); + cmd = concat("false | cp -riv ", yank_files.path); } else { cmd = concat("mv ", yank_files.path); } cmd = concat(cmd, "/"); cmd = concat(cmd, *yank_files.list); cmd = concat(cmd, " ./"); - mvprintw(i, 0, cmd); - if (system(cmd) != 0) { - cmd = concat(cmd, *yank_files.list); - char *line = NULL; - size_t size = 0; - FILE *cmd_open; - while (1) { - cmd_open = popen(cmd, "r"); - int val = getline(&line, &size, cmd_open); - - if (pclose(cmd_open) == 0) { - break; - } else if (val == 0 || val == -1) { - break; - } - cmd = concat(cmd, "_"); + cmd = concat(cmd, *yank_files.list); + cmd = concat(cmd, " 2>&1"); + char *line = malloc(255); + FILE *cmd_open; + while (1) { + cmd_open = popen(cmd, "r"); + if (fgets(line, 255, cmd_open) == 0) { + break; } - + if (strstr(line, "are the same file")) { + cmd[strlen(cmd)-strlen(" 2>&1")] = '\0'; + cmd = concat(cmd, "_"); + cmd = concat(cmd, " 2>&1"); + } else if ((strstr(line, "overwrite"))) { + cmd[strlen(cmd)-strlen(" 2>&1")] = '\0'; + cmd = concat(cmd, "_"); + cmd = concat(cmd, " 2>&1"); + } else if ((strstr(line, "No such file or directory"))) { + pclose(cmd_open); + break; + } else if (pclose(cmd_open) == 0) { + break; + } + pclose(cmd_open); } + + free(cmd); + yank_files.list++; } yank_files.list -= yank_files.count;