forked from enlightenment/enlightenment
parent
3d5b67d428
commit
bd73abaffa
|
@ -18,7 +18,7 @@
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
# endif
|
# endif
|
||||||
void *alloca (size_t);
|
void *alloca(size_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
@ -47,9 +47,9 @@ void *alloca (size_t);
|
||||||
#define COPYBUFSIZE 16384
|
#define COPYBUFSIZE 16384
|
||||||
#define REMOVECHUNKSIZE 4096
|
#define REMOVECHUNKSIZE 4096
|
||||||
|
|
||||||
#define FREE(p) do { if (p) {free((void *)p); p = NULL;} } while (0)
|
#define FREE(p) do { if (p) {free((void *)p); p = NULL; } } while (0)
|
||||||
|
|
||||||
#define LG(fmt, args...) {\
|
#define LG(fmt, args ...) { \
|
||||||
FILE *f = fopen("log", "a"); \
|
FILE *f = fopen("log", "a"); \
|
||||||
if (f) fprintf(f, fmt, ##args); \
|
if (f) fprintf(f, fmt, ##args); \
|
||||||
if (f) fclose(f); \
|
if (f) fclose(f); \
|
||||||
|
@ -62,7 +62,7 @@ static E_Fm_Op_Task *_e_fm_op_task_new();
|
||||||
static void _e_fm_op_task_free(void *t);
|
static void _e_fm_op_task_free(void *t);
|
||||||
|
|
||||||
static void _e_fm_op_remove_link_task(E_Fm_Op_Task *task);
|
static void _e_fm_op_remove_link_task(E_Fm_Op_Task *task);
|
||||||
static Eina_Bool _e_fm_op_stdin_data(void *data, Ecore_Fd_Handler * fd_handler);
|
static Eina_Bool _e_fm_op_stdin_data(void *data, Ecore_Fd_Handler *fd_handler);
|
||||||
static void _e_fm_op_set_up_idlers();
|
static void _e_fm_op_set_up_idlers();
|
||||||
static void _e_fm_op_delete_idler(int *mark);
|
static void _e_fm_op_delete_idler(int *mark);
|
||||||
static int _e_fm_op_idler_handle_error(int *mark, Eina_List **queue, Eina_List **node, E_Fm_Op_Task *task);
|
static int _e_fm_op_idler_handle_error(int *mark, Eina_List **queue, Eina_List **node, E_Fm_Op_Task *task);
|
||||||
|
@ -70,24 +70,24 @@ static int _e_fm_op_idler_handle_error(int *mark, Eina_List **queue, Eina_List *
|
||||||
static Eina_Bool _e_fm_op_work_idler(void *data);
|
static Eina_Bool _e_fm_op_work_idler(void *data);
|
||||||
static Eina_Bool _e_fm_op_scan_idler(void *data);
|
static Eina_Bool _e_fm_op_scan_idler(void *data);
|
||||||
|
|
||||||
static void _e_fm_op_send_error(E_Fm_Op_Task * task, E_Fm_Op_Type type, const char *fmt, ...);
|
static void _e_fm_op_send_error(E_Fm_Op_Task *task, E_Fm_Op_Type type, const char *fmt, ...);
|
||||||
static void _e_fm_op_rollback(E_Fm_Op_Task * task);
|
static void _e_fm_op_rollback(E_Fm_Op_Task *task);
|
||||||
static void _e_fm_op_update_progress_report_simple(int percent, const char *src, const char *dst);
|
static void _e_fm_op_update_progress_report_simple(int percent, const char *src, const char *dst);
|
||||||
static void _e_fm_op_update_progress(E_Fm_Op_Task *task, off_t _plus_e_fm_op_done, off_t _plus_e_fm_op_total);
|
static void _e_fm_op_update_progress(E_Fm_Op_Task *task, off_t _plus_e_fm_op_done, off_t _plus_e_fm_op_total);
|
||||||
static void _e_fm_op_copy_stat_info(E_Fm_Op_Task *task);
|
static void _e_fm_op_copy_stat_info(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_handle_overwrite(E_Fm_Op_Task *task);
|
static int _e_fm_op_handle_overwrite(E_Fm_Op_Task *task);
|
||||||
|
|
||||||
static int _e_fm_op_copy_dir(E_Fm_Op_Task * task);
|
static int _e_fm_op_copy_dir(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_copy_link(E_Fm_Op_Task *task);
|
static int _e_fm_op_copy_link(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_copy_fifo(E_Fm_Op_Task *task);
|
static int _e_fm_op_copy_fifo(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_open_files(E_Fm_Op_Task *task);
|
static int _e_fm_op_open_files(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_copy_chunk(E_Fm_Op_Task *task);
|
static int _e_fm_op_copy_chunk(E_Fm_Op_Task *task);
|
||||||
|
|
||||||
static int _e_fm_op_copy_atom(E_Fm_Op_Task * task);
|
static int _e_fm_op_copy_atom(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_scan_atom(E_Fm_Op_Task * task);
|
static int _e_fm_op_scan_atom(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_copy_stat_info_atom(E_Fm_Op_Task * task);
|
static int _e_fm_op_copy_stat_info_atom(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_symlink_atom(E_Fm_Op_Task * task);
|
static int _e_fm_op_symlink_atom(E_Fm_Op_Task *task);
|
||||||
static int _e_fm_op_remove_atom(E_Fm_Op_Task * task);
|
static int _e_fm_op_remove_atom(E_Fm_Op_Task *task);
|
||||||
|
|
||||||
Ecore_Fd_Handler *_e_fm_op_stdin_handler = NULL;
|
Ecore_Fd_Handler *_e_fm_op_stdin_handler = NULL;
|
||||||
|
|
||||||
|
@ -163,9 +163,12 @@ main(int argc, char **argv)
|
||||||
i = 2;
|
i = 2;
|
||||||
|
|
||||||
if (!strcmp(argv[1], "cp")) type = E_FM_OP_COPY;
|
if (!strcmp(argv[1], "cp")) type = E_FM_OP_COPY;
|
||||||
else if (!strcmp(argv[1], "mv")) type = E_FM_OP_MOVE;
|
else if (!strcmp(argv[1], "mv"))
|
||||||
else if (!strcmp(argv[1], "rm")) type = E_FM_OP_REMOVE;
|
type = E_FM_OP_MOVE;
|
||||||
else if (!strcmp(argv[1], "lns")) type = E_FM_OP_SYMLINK;
|
else if (!strcmp(argv[1], "rm"))
|
||||||
|
type = E_FM_OP_REMOVE;
|
||||||
|
else if (!strcmp(argv[1], "lns"))
|
||||||
|
type = E_FM_OP_SYMLINK;
|
||||||
else return 0;
|
else return 0;
|
||||||
|
|
||||||
if ((type == E_FM_OP_COPY) ||
|
if ((type == E_FM_OP_COPY) ||
|
||||||
|
@ -255,7 +258,7 @@ main(int argc, char **argv)
|
||||||
eina_list_append(_e_fm_op_scan_queue, task);
|
eina_list_append(_e_fm_op_scan_queue, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
skip_arg:
|
skip_arg:
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,7 +417,7 @@ _e_fm_op_remove_link_task(E_Fm_Op_Task *task)
|
||||||
* did not actually read enough data.
|
* did not actually read enough data.
|
||||||
*/
|
*/
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_e_fm_op_stdin_data(void *data __UNUSED__, Ecore_Fd_Handler * fd_handler)
|
_e_fm_op_stdin_data(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
static char *buf = NULL;
|
static char *buf = NULL;
|
||||||
|
@ -487,6 +490,7 @@ _e_fm_op_stdin_data(void *data __UNUSED__, Ecore_Fd_Handler * fd_handler)
|
||||||
_e_fm_op_abort = 1;
|
_e_fm_op_abort = 1;
|
||||||
E_FM_OP_DEBUG("Aborted.\n");
|
E_FM_OP_DEBUG("Aborted.\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_FM_OP_ERROR_RESPONSE_ABORT:
|
case E_FM_OP_ERROR_RESPONSE_ABORT:
|
||||||
case E_FM_OP_ERROR_RESPONSE_IGNORE_THIS:
|
case E_FM_OP_ERROR_RESPONSE_IGNORE_THIS:
|
||||||
case E_FM_OP_ERROR_RESPONSE_IGNORE_ALL:
|
case E_FM_OP_ERROR_RESPONSE_IGNORE_ALL:
|
||||||
|
@ -494,6 +498,7 @@ _e_fm_op_stdin_data(void *data __UNUSED__, Ecore_Fd_Handler * fd_handler)
|
||||||
_e_fm_op_error_response = identity;
|
_e_fm_op_error_response = identity;
|
||||||
_e_fm_op_set_up_idlers();
|
_e_fm_op_set_up_idlers();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case E_FM_OP_OVERWRITE_RESPONSE_NO:
|
case E_FM_OP_OVERWRITE_RESPONSE_NO:
|
||||||
case E_FM_OP_OVERWRITE_RESPONSE_NO_ALL:
|
case E_FM_OP_OVERWRITE_RESPONSE_NO_ALL:
|
||||||
case E_FM_OP_OVERWRITE_RESPONSE_YES:
|
case E_FM_OP_OVERWRITE_RESPONSE_YES:
|
||||||
|
@ -520,24 +525,24 @@ _e_fm_op_set_up_idlers()
|
||||||
_e_fm_op_work_idler_p = ecore_idler_add(_e_fm_op_work_idler, NULL);
|
_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, ...)\
|
#define _E_FM_OP_ERROR_SEND_SCAN(_task, _e_fm_op_error_type, _fmt, ...) \
|
||||||
do\
|
do \
|
||||||
{\
|
{ \
|
||||||
int _errno = errno;\
|
int _errno = errno; \
|
||||||
_e_fm_op_scan_error = 1;\
|
_e_fm_op_scan_error = 1; \
|
||||||
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno));\
|
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno)); \
|
||||||
return 1;\
|
return 1; \
|
||||||
}\
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
#define _E_FM_OP_ERROR_SEND_WORK(_task, _e_fm_op_error_type, _fmt, ...)\
|
#define _E_FM_OP_ERROR_SEND_WORK(_task, _e_fm_op_error_type, _fmt, ...) \
|
||||||
do\
|
do \
|
||||||
{\
|
{ \
|
||||||
int _errno = errno;\
|
int _errno = errno; \
|
||||||
_e_fm_op_work_error = 1;\
|
_e_fm_op_work_error = 1; \
|
||||||
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno));\
|
_e_fm_op_send_error(_task, _e_fm_op_error_type, _fmt, __VA_ARGS__, strerror(_errno)); \
|
||||||
return 1;\
|
return 1; \
|
||||||
}\
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -627,7 +632,7 @@ _e_fm_op_idler_handle_error(int *mark, Eina_List **queue, Eina_List **node, E_Fm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (( _e_fm_op_work_error) || (_e_fm_op_scan_error))
|
else if ((_e_fm_op_work_error) || (_e_fm_op_scan_error))
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -798,7 +803,7 @@ _e_fm_op_scan_idler(void *data __UNUSED__)
|
||||||
{
|
{
|
||||||
Eina_File_Direct_Info *info;
|
Eina_File_Direct_Info *info;
|
||||||
|
|
||||||
if (!eina_iterator_next(dir, (void**) &info))
|
if (!eina_iterator_next(dir, (void **)&info))
|
||||||
{
|
{
|
||||||
ntask = _e_fm_op_task_new();
|
ntask = _e_fm_op_task_new();
|
||||||
ntask->type = E_FM_OP_COPY_STAT_INFO;
|
ntask->type = E_FM_OP_COPY_STAT_INFO;
|
||||||
|
@ -1017,11 +1022,11 @@ _e_fm_op_update_progress(E_Fm_Op_Task *task, off_t _plus_e_fm_op_done, off_t _pl
|
||||||
if (!s_time) s_time = ecore_time_get();
|
if (!s_time) s_time = ecore_time_get();
|
||||||
|
|
||||||
/* Update ETA once a second */
|
/* Update ETA once a second */
|
||||||
if ((_e_fm_op_done) && (ecore_time_get() - c_time > 1.0 ))
|
if ((_e_fm_op_done) && (ecore_time_get() - c_time > 1.0))
|
||||||
{
|
{
|
||||||
c_time = ecore_time_get();
|
c_time = ecore_time_get();
|
||||||
eta = (c_time - s_time) * (_e_fm_op_total - _e_fm_op_done) / _e_fm_op_done;
|
eta = (c_time - s_time) * (_e_fm_op_total - _e_fm_op_done) / _e_fm_op_done;
|
||||||
eta = (int) (eta + 0.5);
|
eta = (int)(eta + 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((percent != ppercent) || (eta != peta) || ((task) && (task != ptask)))
|
if ((percent != ppercent) || (eta != peta) || ((task) && (task != ptask)))
|
||||||
|
@ -1110,7 +1115,7 @@ _e_fm_op_handle_overwrite(E_Fm_Op_Task *task)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_fm_op_copy_dir(E_Fm_Op_Task * task)
|
_e_fm_op_copy_dir(E_Fm_Op_Task *task)
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
|
@ -1313,7 +1318,7 @@ _e_fm_op_copy_chunk(E_Fm_Op_Task *task)
|
||||||
* Return value does not matter. It's there only to _E_FM_OP_ERROR_SEND macro to work correctly. (Well, it works fine, just don't want GCC to produce a warning.)
|
* Return value does not matter. It's there only to _E_FM_OP_ERROR_SEND macro to work correctly. (Well, it works fine, just don't want GCC to produce a warning.)
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
_e_fm_op_copy_atom(E_Fm_Op_Task * task)
|
_e_fm_op_copy_atom(E_Fm_Op_Task *task)
|
||||||
{
|
{
|
||||||
E_Fm_Op_Copy_Data *data;
|
E_Fm_Op_Copy_Data *data;
|
||||||
|
|
||||||
|
@ -1362,7 +1367,7 @@ _e_fm_op_copy_atom(E_Fm_Op_Task * task)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_fm_op_scan_atom(E_Fm_Op_Task * task)
|
_e_fm_op_scan_atom(E_Fm_Op_Task *task)
|
||||||
{
|
{
|
||||||
E_Fm_Op_Task *ctask, *rtask;
|
E_Fm_Op_Task *ctask, *rtask;
|
||||||
|
|
||||||
|
@ -1467,7 +1472,7 @@ _e_fm_op_scan_atom(E_Fm_Op_Task * task)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_fm_op_copy_stat_info_atom(E_Fm_Op_Task * task)
|
_e_fm_op_copy_stat_info_atom(E_Fm_Op_Task *task)
|
||||||
{
|
{
|
||||||
E_FM_OP_DEBUG("Stat: %s --> %s\n", task->src.name, task->dst.name);
|
E_FM_OP_DEBUG("Stat: %s --> %s\n", task->src.name, task->dst.name);
|
||||||
|
|
||||||
|
@ -1498,7 +1503,7 @@ _e_fm_op_symlink_atom(E_Fm_Op_Task *task)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_e_fm_op_remove_atom(E_Fm_Op_Task * task)
|
_e_fm_op_remove_atom(E_Fm_Op_Task *task)
|
||||||
{
|
{
|
||||||
if (_e_fm_op_abort) return 1;
|
if (_e_fm_op_abort) return 1;
|
||||||
|
|
||||||
|
@ -1530,3 +1535,4 @@ _e_fm_op_remove_atom(E_Fm_Op_Task * task)
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue