* 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_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);

View File

@ -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;

View File

@ -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,

View File

@ -23,6 +23,8 @@
# include "config.h"
#endif
#include <errno.h>
#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;