From: Maxime Villard <rustyBSD@gmx.fr>

$ mkdir /home/test/EMPTY
 $ mkdir /home/test/FULL
 $ cd /home/test
 $ ln -s EMPTY link

 Now move (with EFM) the 'FULL' folder to the 'link' (without
 opening it), and 'FULL' diseappear.

 As the symlink points directly to 'EMPTY', we have not the
 full path. So the 'FULL' directory is moved to ~/, instead
 of the desired dest.

 Here is a quickly-made a patch.


SVN revision: 76591
This commit is contained in:
Maxime Villard 2012-09-13 08:34:24 +00:00 committed by Mike Blumenkrantz
parent 3ed9034661
commit 0d45c19468
1 changed files with 29 additions and 23 deletions

View File

@ -49,6 +49,26 @@ void *alloca(size_t);
#define E_FREE(p) do { free(p); p = NULL; } while (0)
#define _E_FM_OP_ERROR_SEND_SCAN(_task, _e_fm_op_error_type, _fmt, ...) \
do \
{ \
int _errno = errno; \
_e_fm_op_scan_error = 1; \
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno)); \
return 1; \
} \
while (0)
#define _E_FM_OP_ERROR_SEND_WORK(_task, _e_fm_op_error_type, _fmt, ...) \
do \
{ \
int _errno = errno; \
_e_fm_op_work_error = 1; \
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno)); \
return 1; \
} \
while (0)
typedef struct _E_Fm_Op_Task E_Fm_Op_Task;
typedef struct _E_Fm_Op_Copy_Data E_Fm_Op_Copy_Data;
@ -234,9 +254,15 @@ main(int argc, char **argv)
}
else
{
if ((type == E_FM_OP_MOVE) &&
(!strcmp(argv[i],buf)))
goto skip_arg;
if (type == E_FM_OP_MOVE)
{
if (!strcmp(argv[i],buf))
goto skip_arg;
if (buf[0]!='/')
_E_FM_OP_ERROR_SEND_SCAN(0, E_FM_OP_ERROR,
"Unknown destination '%s': %s.", buf);
}
E_Fm_Op_Task *task;
@ -508,26 +534,6 @@ _e_fm_op_set_up_idlers()
_e_fm_op_work_idler_p = ecore_idler_add(_e_fm_op_work_idler, NULL);
}
#define _E_FM_OP_ERROR_SEND_SCAN(_task, _e_fm_op_error_type, _fmt, ...) \
do \
{ \
int _errno = errno; \
_e_fm_op_scan_error = 1; \
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno)); \
return 1; \
} \
while (0)
#define _E_FM_OP_ERROR_SEND_WORK(_task, _e_fm_op_error_type, _fmt, ...) \
do \
{ \
int _errno = errno; \
_e_fm_op_work_error = 1; \
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno)); \
return 1; \
} \
while (0)
static void
_e_fm_op_delete_idler(int *mark)
{