forked from enlightenment/efl
parent
d098e05951
commit
cbff3eb25a
|
@ -83,6 +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);
|
||||
|
||||
struct _Eio_Progress
|
||||
{
|
||||
|
|
|
@ -199,23 +199,18 @@ eio_file_ls(const char *dir,
|
|||
async->filter_cb = filter_cb;
|
||||
async->main_cb = main_cb;
|
||||
async->ls.directory = eina_stringshare_add(dir);
|
||||
async->ls.common.done_cb = done_cb;
|
||||
async->ls.common.error_cb = error_cb;
|
||||
async->ls.common.data = data;
|
||||
async->ls.common.thread = ecore_long_run(_eio_file_heavy,
|
||||
_eio_file_notify,
|
||||
_eio_file_end,
|
||||
_eio_file_error,
|
||||
async,
|
||||
EINA_TRUE);
|
||||
if (!async->ls.common.thread) goto on_error;
|
||||
|
||||
if (!eio_long_file_set(&async->ls.common,
|
||||
done_cb,
|
||||
error_cb,
|
||||
data,
|
||||
_eio_file_heavy,
|
||||
_eio_file_notify,
|
||||
_eio_file_end,
|
||||
_eio_file_error))
|
||||
return NULL;
|
||||
|
||||
return &async->ls.common;
|
||||
|
||||
on_error:
|
||||
eina_stringshare_del(async->ls.directory);
|
||||
free(async);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -249,23 +244,18 @@ eio_file_direct_ls(const char *dir,
|
|||
async->filter_cb = filter_cb;
|
||||
async->main_cb = main_cb;
|
||||
async->ls.directory = eina_stringshare_add(dir);
|
||||
async->ls.common.done_cb = done_cb;
|
||||
async->ls.common.error_cb = error_cb;
|
||||
async->ls.common.data = data;
|
||||
async->ls.common.thread = ecore_long_run(_eio_file_direct_heavy,
|
||||
_eio_file_direct_notify,
|
||||
_eio_file_end,
|
||||
_eio_file_error,
|
||||
async,
|
||||
EINA_TRUE);
|
||||
if (!async->ls.common.thread) goto on_error;
|
||||
|
||||
if (!eio_long_file_set(&async->ls.common,
|
||||
done_cb,
|
||||
error_cb,
|
||||
data,
|
||||
_eio_file_direct_heavy,
|
||||
_eio_file_direct_notify,
|
||||
_eio_file_end,
|
||||
_eio_file_error))
|
||||
return NULL;
|
||||
|
||||
return &async->ls.common;
|
||||
|
||||
on_error:
|
||||
eina_stringshare_del(async->ls.directory);
|
||||
free(async);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
|
|
|
@ -72,6 +72,23 @@ struct _Eio_File_Stat
|
|||
const char *path;
|
||||
};
|
||||
|
||||
Eina_Bool eio_file_set(Eio_File *common,
|
||||
Eio_Done_Cb done_cb,
|
||||
Eio_Done_Cb error_cb,
|
||||
const void *data,
|
||||
Ecore_Cb job_cb,
|
||||
Ecore_Cb end_cb,
|
||||
Ecore_Cb cancel_cb);
|
||||
|
||||
Eina_Bool eio_long_file_set(Eio_File *common,
|
||||
Eio_Done_Cb done_cb,
|
||||
Eio_Done_Cb error_cb,
|
||||
const void *data,
|
||||
Ecore_Thread_Heavy_Cb heavy_cb,
|
||||
Ecore_Thread_Notify_Cb notify_cb,
|
||||
Ecore_Cb end_cb,
|
||||
Ecore_Cb cancel_cb);
|
||||
|
||||
void eio_file_error(Eio_File *common);
|
||||
void eio_file_thread_error(Eio_File *common);
|
||||
|
||||
|
|
|
@ -40,6 +40,58 @@ eio_file_thread_error(Eio_File *common)
|
|||
ecore_thread_cancel(common->thread);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
eio_long_file_set(Eio_File *common,
|
||||
Eio_Done_Cb done_cb,
|
||||
Eio_Done_Cb error_cb,
|
||||
const void *data,
|
||||
Ecore_Thread_Heavy_Cb heavy_cb,
|
||||
Ecore_Thread_Notify_Cb notify_cb,
|
||||
Ecore_Cb end_cb,
|
||||
Ecore_Cb cancel_cb)
|
||||
{
|
||||
Ecore_Thread *thread;
|
||||
|
||||
common->done_cb = done_cb;
|
||||
common->error_cb = error_cb;
|
||||
common->data = data;
|
||||
|
||||
thread = ecore_long_run(heavy_cb,
|
||||
notify_cb,
|
||||
end_cb,
|
||||
cancel_cb,
|
||||
common,
|
||||
EINA_TRUE);
|
||||
|
||||
if (!thread) return EINA_FALSE;
|
||||
common->thread = thread;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
eio_file_set(Eio_File *common,
|
||||
Eio_Done_Cb done_cb,
|
||||
Eio_Done_Cb error_cb,
|
||||
const void *data,
|
||||
Ecore_Cb job_cb,
|
||||
Ecore_Cb end_cb,
|
||||
Ecore_Cb cancel_cb)
|
||||
{
|
||||
Ecore_Thread *thread;
|
||||
|
||||
common->done_cb = done_cb;
|
||||
common->error_cb = error_cb;
|
||||
common->data = data;
|
||||
thread = ecore_thread_run(job_cb,
|
||||
end_cb,
|
||||
cancel_cb,
|
||||
common);
|
||||
|
||||
if (!thread) return EINA_FALSE;
|
||||
common->thread = thread;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
/* --- */
|
||||
|
||||
static void
|
||||
|
@ -176,21 +228,17 @@ eio_file_direct_stat(const char *path,
|
|||
|
||||
s->path = eina_stringshare_add(path);
|
||||
s->done_cb = done_cb;
|
||||
s->common.done_cb = NULL;
|
||||
s->common.error_cb = error_cb;
|
||||
s->common.data = data;
|
||||
s->common.thread = ecore_thread_run(_eio_file_stat,
|
||||
_eio_file_stat_done,
|
||||
_eio_file_stat_error,
|
||||
s);
|
||||
if (!s->common.thread) goto on_error;
|
||||
|
||||
if (!eio_file_set(&s->common,
|
||||
NULL,
|
||||
error_cb,
|
||||
data,
|
||||
_eio_file_stat,
|
||||
_eio_file_stat_done,
|
||||
_eio_file_stat_error))
|
||||
return NULL;
|
||||
|
||||
return &s->common;
|
||||
|
||||
on_error:
|
||||
eina_stringshare_del(s->path);
|
||||
free(s);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -217,21 +265,17 @@ eio_file_unlink(const char *path,
|
|||
if (!l) return NULL;
|
||||
|
||||
l->path = eina_stringshare_add(path);
|
||||
l->common.done_cb = done_cb;
|
||||
l->common.error_cb = error_cb;
|
||||
l->common.data = data;
|
||||
l->common.thread = ecore_thread_run(_eio_file_unlink,
|
||||
_eio_file_unlink_done,
|
||||
_eio_file_unlink_error,
|
||||
l);
|
||||
if (!l->common.thread) goto on_error;
|
||||
|
||||
if (!eio_file_set(&l->common,
|
||||
done_cb,
|
||||
error_cb,
|
||||
data,
|
||||
_eio_file_unlink,
|
||||
_eio_file_unlink_done,
|
||||
_eio_file_unlink_error))
|
||||
return NULL;
|
||||
|
||||
return &l->common;
|
||||
|
||||
on_error:
|
||||
eina_stringshare_del(l->path);
|
||||
free(l);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -261,21 +305,17 @@ eio_file_mkdir(const char *path,
|
|||
|
||||
r->path = eina_stringshare_add(path);
|
||||
r->mode = mode;
|
||||
r->common.done_cb = done_cb;
|
||||
r->common.error_cb = error_cb;
|
||||
r->common.data = data;
|
||||
r->common.thread = ecore_thread_run(_eio_file_mkdir,
|
||||
_eio_file_mkdir_done,
|
||||
_eio_file_mkdir_error,
|
||||
r);
|
||||
if (!r->common.thread) goto on_error;
|
||||
|
||||
if (!eio_file_set(&r->common,
|
||||
done_cb,
|
||||
error_cb,
|
||||
data,
|
||||
_eio_file_mkdir,
|
||||
_eio_file_mkdir_done,
|
||||
_eio_file_mkdir_error))
|
||||
return NULL;
|
||||
|
||||
return &r->common;
|
||||
|
||||
on_error:
|
||||
eina_stringshare_del(r->path);
|
||||
free(r);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue