diff --git a/legacy/eio/src/lib/Eio.h b/legacy/eio/src/lib/Eio.h index 8410dc1d00..48fbc3cc47 100644 --- a/legacy/eio/src/lib/Eio.h +++ b/legacy/eio/src/lib/Eio.h @@ -83,7 +83,7 @@ typedef void (*Eio_Stat_Cb)(const void *data, const struct stat *stat); typedef void (*Eio_Progress_Cb)(const void *data, const Eio_Progress *info); typedef void (*Eio_Done_Cb)(const void *data); -typedef void (*Eio_Error_Cb)(int errno, const void *data); +typedef void (*Eio_Error_Cb)(int error, const void *data); struct _Eio_Progress { @@ -99,64 +99,64 @@ EAPI Eio_File *eio_file_ls(const char *dir, Eio_Filter_Cb filter_cb, Eio_Main_Cb main_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_file_direct_ls(const char *dir, Eio_Filter_Direct_Cb filter_cb, Eio_Main_Direct_Cb main_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_file_direct_stat(const char *path, Eio_Stat_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_file_unlink(const char *path, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_file_mkdir(const char *path, mode_t mode, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_file_move(const char *source, const char *dest, Eio_Progress_Cb progress_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_file_copy(const char *source, const char *dest, Eio_Progress_Cb progress_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_dir_move(const char *source, const char *dest, Eio_Progress_Cb progress_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_dir_copy(const char *source, const char *dest, Eio_Progress_Cb progress_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eio_File *eio_dir_unlink(const char *path, Eio_Progress_Cb progress_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data); EAPI Eina_Bool eio_file_cancel(Eio_File *ls); diff --git a/legacy/eio/src/lib/eio_file.c b/legacy/eio/src/lib/eio_file.c index e0341df957..ec299a1a3f 100644 --- a/legacy/eio/src/lib/eio_file.c +++ b/legacy/eio/src/lib/eio_file.c @@ -185,7 +185,7 @@ eio_file_ls(const char *dir, Eio_Filter_Cb filter_cb, Eio_Main_Cb main_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data) { Eio_File_Char_Ls *async = NULL; @@ -230,7 +230,7 @@ eio_file_direct_ls(const char *dir, Eio_Filter_Direct_Cb filter_cb, Eio_Main_Direct_Cb main_cb, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data) { Eio_File_Direct_Ls *async = NULL; diff --git a/legacy/eio/src/lib/eio_private.h b/legacy/eio/src/lib/eio_private.h index e0505713c9..fddf78aa61 100644 --- a/legacy/eio/src/lib/eio_private.h +++ b/legacy/eio/src/lib/eio_private.h @@ -21,8 +21,10 @@ struct _Eio_File Ecore_Thread *thread; const void *data; + int error; + + Eio_Error_Cb error_cb; Eio_Done_Cb done_cb; - Eio_Done_Cb error_cb; }; struct _Eio_File_Ls @@ -72,17 +74,19 @@ struct _Eio_File_Stat const char *path; }; +/* Be aware that ecore_thread_run could call cancel_cb if something goes wrong. */ Eina_Bool eio_file_set(Eio_File *common, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data, Ecore_Cb job_cb, Ecore_Cb end_cb, Ecore_Cb cancel_cb); +/* Be aware that ecore_thread_run could call cancel_cb if something goes wrong. */ Eina_Bool eio_long_file_set(Eio_File *common, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data, Ecore_Thread_Heavy_Cb heavy_cb, Ecore_Thread_Notify_Cb notify_cb, diff --git a/legacy/eio/src/lib/eio_single.c b/legacy/eio/src/lib/eio_single.c index a929730eaf..23dd65bd67 100644 --- a/legacy/eio/src/lib/eio_single.c +++ b/legacy/eio/src/lib/eio_single.c @@ -23,6 +23,8 @@ # include "config.h" #endif +#include + #include "eio_private.h" #include "Eio.h" @@ -31,19 +33,20 @@ void eio_file_error(Eio_File *common) { if (common->error_cb) - common->error_cb(common->data); + common->error_cb(common->error, common->data); } void eio_file_thread_error(Eio_File *common) { + common->error = errno; ecore_thread_cancel(common->thread); } Eina_Bool eio_long_file_set(Eio_File *common, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data, Ecore_Thread_Heavy_Cb heavy_cb, Ecore_Thread_Notify_Cb notify_cb, @@ -55,7 +58,9 @@ eio_long_file_set(Eio_File *common, common->done_cb = done_cb; common->error_cb = error_cb; common->data = data; + common->error = 0; + /* Be aware that ecore_thread_run could call cancel_cb if something goes wrong. */ thread = ecore_long_run(heavy_cb, notify_cb, end_cb, @@ -71,7 +76,7 @@ eio_long_file_set(Eio_File *common, Eina_Bool eio_file_set(Eio_File *common, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data, Ecore_Cb job_cb, Ecore_Cb end_cb, @@ -82,6 +87,9 @@ eio_file_set(Eio_File *common, common->done_cb = done_cb; common->error_cb = error_cb; common->data = data; + common->error = 0; + + /* Be aware that ecore_thread_run could call cancel_cb if something goes wrong. */ thread = ecore_thread_run(job_cb, end_cb, cancel_cb, @@ -215,7 +223,7 @@ _eio_file_stat_error(void *data) EAPI Eio_File * eio_file_direct_stat(const char *path, Eio_Stat_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data) { Eio_File_Stat *s = NULL; @@ -253,7 +261,7 @@ eio_file_direct_stat(const char *path, EAPI Eio_File * eio_file_unlink(const char *path, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data) { Eio_File_Unlink *l = NULL; @@ -292,7 +300,7 @@ EAPI Eio_File * eio_file_mkdir(const char *path, mode_t mode, Eio_Done_Cb done_cb, - Eio_Done_Cb error_cb, + Eio_Error_Cb error_cb, const void *data) { Eio_File_Mkdir *r = NULL;