* eio: return errno on error.

SVN revision: 51946
This commit is contained in:
Cedric BAIL 2010-09-07 14:43:51 +00:00
parent ebf52e3f5f
commit 0a4134fd5f
4 changed files with 34 additions and 22 deletions

View File

@ -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_Progress_Cb)(const void *data, const Eio_Progress *info);
typedef void (*Eio_Done_Cb)(const void *data); 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 struct _Eio_Progress
{ {
@ -99,64 +99,64 @@ EAPI Eio_File *eio_file_ls(const char *dir,
Eio_Filter_Cb filter_cb, Eio_Filter_Cb filter_cb,
Eio_Main_Cb main_cb, Eio_Main_Cb main_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_file_direct_ls(const char *dir, EAPI Eio_File *eio_file_direct_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb, Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb, Eio_Main_Direct_Cb main_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_file_direct_stat(const char *path, EAPI Eio_File *eio_file_direct_stat(const char *path,
Eio_Stat_Cb done_cb, Eio_Stat_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_file_unlink(const char *path, EAPI Eio_File *eio_file_unlink(const char *path,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_file_mkdir(const char *path, EAPI Eio_File *eio_file_mkdir(const char *path,
mode_t mode, mode_t mode,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_file_move(const char *source, EAPI Eio_File *eio_file_move(const char *source,
const char *dest, const char *dest,
Eio_Progress_Cb progress_cb, Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_file_copy(const char *source, EAPI Eio_File *eio_file_copy(const char *source,
const char *dest, const char *dest,
Eio_Progress_Cb progress_cb, Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_dir_move(const char *source, EAPI Eio_File *eio_dir_move(const char *source,
const char *dest, const char *dest,
Eio_Progress_Cb progress_cb, Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_dir_copy(const char *source, EAPI Eio_File *eio_dir_copy(const char *source,
const char *dest, const char *dest,
Eio_Progress_Cb progress_cb, Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eio_File *eio_dir_unlink(const char *path, EAPI Eio_File *eio_dir_unlink(const char *path,
Eio_Progress_Cb progress_cb, Eio_Progress_Cb progress_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data); const void *data);
EAPI Eina_Bool eio_file_cancel(Eio_File *ls); EAPI Eina_Bool eio_file_cancel(Eio_File *ls);

View File

@ -185,7 +185,7 @@ eio_file_ls(const char *dir,
Eio_Filter_Cb filter_cb, Eio_Filter_Cb filter_cb,
Eio_Main_Cb main_cb, Eio_Main_Cb main_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data) const void *data)
{ {
Eio_File_Char_Ls *async = NULL; Eio_File_Char_Ls *async = NULL;
@ -230,7 +230,7 @@ eio_file_direct_ls(const char *dir,
Eio_Filter_Direct_Cb filter_cb, Eio_Filter_Direct_Cb filter_cb,
Eio_Main_Direct_Cb main_cb, Eio_Main_Direct_Cb main_cb,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data) const void *data)
{ {
Eio_File_Direct_Ls *async = NULL; Eio_File_Direct_Ls *async = NULL;

View File

@ -21,8 +21,10 @@ struct _Eio_File
Ecore_Thread *thread; Ecore_Thread *thread;
const void *data; const void *data;
int error;
Eio_Error_Cb error_cb;
Eio_Done_Cb done_cb; Eio_Done_Cb done_cb;
Eio_Done_Cb error_cb;
}; };
struct _Eio_File_Ls struct _Eio_File_Ls
@ -72,17 +74,19 @@ struct _Eio_File_Stat
const char *path; 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, Eina_Bool eio_file_set(Eio_File *common,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data, const void *data,
Ecore_Cb job_cb, Ecore_Cb job_cb,
Ecore_Cb end_cb, Ecore_Cb end_cb,
Ecore_Cb cancel_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, Eina_Bool eio_long_file_set(Eio_File *common,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data, const void *data,
Ecore_Thread_Heavy_Cb heavy_cb, Ecore_Thread_Heavy_Cb heavy_cb,
Ecore_Thread_Notify_Cb notify_cb, Ecore_Thread_Notify_Cb notify_cb,

View File

@ -23,6 +23,8 @@
# include "config.h" # include "config.h"
#endif #endif
#include <errno.h>
#include "eio_private.h" #include "eio_private.h"
#include "Eio.h" #include "Eio.h"
@ -31,19 +33,20 @@ void
eio_file_error(Eio_File *common) eio_file_error(Eio_File *common)
{ {
if (common->error_cb) if (common->error_cb)
common->error_cb(common->data); common->error_cb(common->error, common->data);
} }
void void
eio_file_thread_error(Eio_File *common) eio_file_thread_error(Eio_File *common)
{ {
common->error = errno;
ecore_thread_cancel(common->thread); ecore_thread_cancel(common->thread);
} }
Eina_Bool Eina_Bool
eio_long_file_set(Eio_File *common, eio_long_file_set(Eio_File *common,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data, const void *data,
Ecore_Thread_Heavy_Cb heavy_cb, Ecore_Thread_Heavy_Cb heavy_cb,
Ecore_Thread_Notify_Cb notify_cb, Ecore_Thread_Notify_Cb notify_cb,
@ -55,7 +58,9 @@ eio_long_file_set(Eio_File *common,
common->done_cb = done_cb; common->done_cb = done_cb;
common->error_cb = error_cb; common->error_cb = error_cb;
common->data = data; 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, thread = ecore_long_run(heavy_cb,
notify_cb, notify_cb,
end_cb, end_cb,
@ -71,7 +76,7 @@ eio_long_file_set(Eio_File *common,
Eina_Bool Eina_Bool
eio_file_set(Eio_File *common, eio_file_set(Eio_File *common,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data, const void *data,
Ecore_Cb job_cb, Ecore_Cb job_cb,
Ecore_Cb end_cb, Ecore_Cb end_cb,
@ -82,6 +87,9 @@ eio_file_set(Eio_File *common,
common->done_cb = done_cb; common->done_cb = done_cb;
common->error_cb = error_cb; common->error_cb = error_cb;
common->data = data; 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, thread = ecore_thread_run(job_cb,
end_cb, end_cb,
cancel_cb, cancel_cb,
@ -215,7 +223,7 @@ _eio_file_stat_error(void *data)
EAPI Eio_File * EAPI Eio_File *
eio_file_direct_stat(const char *path, eio_file_direct_stat(const char *path,
Eio_Stat_Cb done_cb, Eio_Stat_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data) const void *data)
{ {
Eio_File_Stat *s = NULL; Eio_File_Stat *s = NULL;
@ -253,7 +261,7 @@ eio_file_direct_stat(const char *path,
EAPI Eio_File * EAPI Eio_File *
eio_file_unlink(const char *path, eio_file_unlink(const char *path,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data) const void *data)
{ {
Eio_File_Unlink *l = NULL; Eio_File_Unlink *l = NULL;
@ -292,7 +300,7 @@ EAPI Eio_File *
eio_file_mkdir(const char *path, eio_file_mkdir(const char *path,
mode_t mode, mode_t mode,
Eio_Done_Cb done_cb, Eio_Done_Cb done_cb,
Eio_Done_Cb error_cb, Eio_Error_Cb error_cb,
const void *data) const void *data)
{ {
Eio_File_Mkdir *r = NULL; Eio_File_Mkdir *r = NULL;