static int op_remove(void *data, const char *src, const char *dst) { if(cfg.confirm && !curr_stats.confirmed) { curr_stats.confirmed = query_user_menu("Permanent deletion", "Are you sure? If you undoing a command and want to see file names, " "use :undolist! command"); if(!curr_stats.confirmed) return SKIP_UNDO_REDO_OPERATION; } return op_removesl(data, src, dst); }
static int op_remove(ops_t *ops, void *data, const char *src, const char *dst) { if(cfg.confirm && !curr_stats.confirmed && (ops == NULL || !ops->bg)) { curr_stats.confirmed = prompt_msg("Permanent deletion", "Are you sure? If you're undoing a command and want to see file " "names, use :undolist! command"); if(!curr_stats.confirmed) return SKIP_UNDO_REDO_OPERATION; } return op_removesl(ops, data, src, dst); }
/* Moves file/directory overwriting destination files if requested. Returns * non-zero on error, otherwise zero is returned. */ static int op_mv(void *data, const char src[], const char dst[], int overwrite) { #ifndef _WIN32 struct stat st; char *escaped_src, *escaped_dst; char cmd[6 + PATH_MAX*2 + 1]; int result; if(lstat(dst, &st) == 0) return -1; escaped_src = escape_filename(src, 0); escaped_dst = escape_filename(dst, 0); if(escaped_src == NULL || escaped_dst == NULL) { free(escaped_dst); free(escaped_src); return -1; } snprintf(cmd, sizeof(cmd), "mv %s %s %s", overwrite ? "" : NO_CLOBBER, escaped_src, escaped_dst); free(escaped_dst); free(escaped_src); LOG_INFO_MSG("Running mv command: \"%s\"", cmd); if((result = background_and_wait_for_errors(cmd)) != 0) return result; if(path_starts_with(dst, cfg.trash_dir)) add_to_trash(src, strrchr(dst, '/') + 1); else if(path_starts_with(src, cfg.trash_dir)) remove_from_trash(strrchr(src, '/') + 1); return 0; #else BOOL ret = MoveFile(src, dst); if(!ret && GetLastError() == 5) { int r = op_cp(data, src, dst, overwrite); if(r != 0) return r; return op_removesl(data, src, NULL); } return ret == 0; #endif }