mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 04:46:55 +03:00
Denis Vlasenko posted a patch which would fix issue when no dialog for break operation. Trouble: recently i accidentally entered '.' instead of '..' in the file copy dialog on a relatively big tree ... for every file in the tree i got the <foo> and <bar> are the same file message box, without any way to escape except killing mc from the outside. Rework warn_same_file for more usage glib. ... msg = g_strdup_printf() ...
This commit is contained in:
parent
a9d662aa57
commit
a079bd950c
63
src/file.c
63
src/file.c
@ -462,6 +462,22 @@ enum {
|
||||
DEST_FULL /* Created, fully copied */
|
||||
};
|
||||
|
||||
static int warn_same_file(const char *fmt, const char *a, const char *b)
|
||||
{
|
||||
char *msg;
|
||||
/* We don't expect %d etc, just %s, so strlen(fmt) should be ok */
|
||||
int result = 0;
|
||||
msg = g_strdup_printf (fmt, a, b);
|
||||
result = query_dialog (MSG_ERROR, msg, D_ERROR, 2, _("&Skip"), _("&Abort"));
|
||||
g_free(msg);
|
||||
do_refresh ();
|
||||
if ( result ) { /* 1 == Abort */
|
||||
return FILE_ABORT;
|
||||
} else {
|
||||
return FILE_SKIP;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
copy_file_file (FileOpContext *ctx, const char *src_path, const char *dst_path,
|
||||
int ask_overwrite, off_t *progress_count,
|
||||
@ -516,13 +532,9 @@ copy_file_file (FileOpContext *ctx, const char *src_path, const char *dst_path,
|
||||
|
||||
if (dst_exists) {
|
||||
/* Destination already exists */
|
||||
if (sb.st_dev == sb2.st_dev && sb.st_ino == sb2.st_ino) {
|
||||
message (1, MSG_ERROR,
|
||||
_(" `%s' and `%s' are the same file "), src_path, dst_path);
|
||||
do_refresh ();
|
||||
return FILE_SKIP;
|
||||
}
|
||||
|
||||
if (sb.st_dev == sb2.st_dev && sb.st_ino == sb2.st_ino)
|
||||
return warn_same_file(_(" `%s' and `%s' are the same file "),
|
||||
src_path, dst_path);
|
||||
/* Should we replace destination? */
|
||||
if (ask_overwrite) {
|
||||
ctx->do_reget = 0;
|
||||
@ -1048,23 +1060,8 @@ move_file_file (FileOpContext *ctx, const char *s, const char *d,
|
||||
|
||||
if (mc_lstat (d, &dst_stats) == 0) {
|
||||
if (src_stats.st_dev == dst_stats.st_dev
|
||||
&& src_stats.st_ino == dst_stats.st_ino) {
|
||||
int msize = COLS - 36;
|
||||
char st[MC_MAXPATHLEN];
|
||||
char dt[MC_MAXPATHLEN];
|
||||
|
||||
if (msize < 0)
|
||||
msize = 40;
|
||||
msize /= 2;
|
||||
|
||||
strcpy (st, path_trunc (s, msize));
|
||||
strcpy (dt, path_trunc (d, msize));
|
||||
message (1, MSG_ERROR,
|
||||
_(" `%s' and `%s' are the same file "), st, dt);
|
||||
do_refresh ();
|
||||
return FILE_SKIP;
|
||||
}
|
||||
|
||||
&& src_stats.st_ino == dst_stats.st_ino)
|
||||
return warn_same_file(_(" `%s' and `%s' are the same file "), s, d);
|
||||
if (S_ISDIR (dst_stats.st_mode)) {
|
||||
message (1, MSG_ERROR,
|
||||
_(" Cannot overwrite directory `%s' "), d);
|
||||
@ -1171,22 +1168,8 @@ move_dir_dir (FileOpContext *ctx, const char *s, const char *d,
|
||||
} else
|
||||
destdir = concat_dir_and_file (d, x_basename (s));
|
||||
|
||||
if (sbuf.st_dev == dbuf.st_dev && sbuf.st_ino == dbuf.st_ino) {
|
||||
int msize = COLS - 36;
|
||||
char st[MC_MAXPATHLEN];
|
||||
char dt[MC_MAXPATHLEN];
|
||||
|
||||
if (msize < 0)
|
||||
msize = 40;
|
||||
msize /= 2;
|
||||
|
||||
strcpy (st, path_trunc (s, msize));
|
||||
strcpy (dt, path_trunc (d, msize));
|
||||
message (1, MSG_ERROR,
|
||||
_(" `%s' and `%s' are the same directory "), st, dt);
|
||||
do_refresh ();
|
||||
return FILE_SKIP;
|
||||
}
|
||||
if (sbuf.st_dev == dbuf.st_dev && sbuf.st_ino == dbuf.st_ino)
|
||||
return warn_same_file(_(" `%s' and `%s' are the same directory "), s, d);
|
||||
|
||||
/* Check if the user inputted an existing dir */
|
||||
retry_dst_stat:
|
||||
|
Loading…
Reference in New Issue
Block a user