updated: [689164a] copy/move dialog: add trailing '/' to default destination path (fix #181)
Sergei Trofimovich
slyfox at inbox.ru
Wed Jan 28 23:13:03 UTC 2009
The following commit has been merged in the mc-4.6 branch:
commit 689164a6bc39b5c987c52141822db181f1be01f2
Author: Sergei Trofimovich <slyfox at inbox.ru>
Date: Wed Jan 28 23:08:31 2009 +0200
copy/move dialog: add trailing '/' to default destination path (fix #181)
Problem:
When user tried to copy/move file (F5/F6) - he could run into trouble if
destination directory is removed (it can be removed by user from another mc session).
Operation is performed and(!) file is renamed.
So when when user issues 'cp /tmp/a.file /tmp/b' - he gets not expected /tmp/b/a.file,
but /tmp.b !
Solution:
Add trailing space for destination directory for non-local copy/move(F5/F6) operations.
So operation, given above will take form: 'cp /tmp/a.file /tmp/b/' disambiguating b
meaning.
Signed-off-by: Sergei Trofimovich <slyfox at inbox.ru>
diff --git a/src/file.c b/src/file.c
index a19633a..272f9a7 100644
--- a/src/file.c
+++ b/src/file.c
@@ -50,6 +50,8 @@
#include <sys/stat.h>
#include <unistd.h>
+#include <mhl/string.h>
+
#include "global.h"
#include "tty.h"
#include "eregex.h"
@@ -1777,6 +1779,7 @@ panel_operate (void *source_panel, FileOperation operation,
}
} else if (operation != OP_DELETE) {
char *dest_dir;
+ char *dest_dir_;
/* Forced single operations default to the original name */
if (force_single)
@@ -1786,9 +1789,27 @@ panel_operate (void *source_panel, FileOperation operation,
else
dest_dir = panel->cwd;
+ /*
+ * Add trailing backslash only when do non-locally ops.
+ * It saves user from occasional file renames (when destination
+ * dir is deleted)
+ */
+ if (force_single)
+ // just copy
+ dest_dir_ = mhl_str_dup (dest_dir);
+ else
+ // add trailing separator
+ dest_dir_ = mhl_str_concat (dest_dir, PATH_SEP_STR);
+ if (!dest_dir_) {
+ file_op_context_destroy (ctx);
+ return 0;
+ }
+
dest =
- file_mask_dialog (ctx, operation, cmd_buf, dest_dir,
+ file_mask_dialog (ctx, operation, cmd_buf, dest_dir_,
single_entry, &do_bg);
+ mhl_mem_free(dest_dir_);
+
if (!dest) {
file_op_context_destroy (ctx);
return 0;
--
Midnight Commander Development
More information about the mc-devel
mailing list