forked from enlightenment/efl
parent
178339291d
commit
b9fbbaa656
|
@ -176,6 +176,32 @@ if test "x${have_splice}" = "xyes" ; then
|
||||||
AC_DEFINE([EFL_HAVE_SPLICE], [1], [Define to mention that splice syscall is supported])
|
AC_DEFINE([EFL_HAVE_SPLICE], [1], [Define to mention that splice syscall is supported])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
### Check for lstat
|
||||||
|
|
||||||
|
have_lstat="no"
|
||||||
|
AC_TRY_LINK(
|
||||||
|
[
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#if defined(HAVE_UNISTD_H)
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
],
|
||||||
|
[
|
||||||
|
struct stat st;
|
||||||
|
lstat("/tmp", &st);
|
||||||
|
],
|
||||||
|
[have_lstat="yes"],
|
||||||
|
[have_lstat="no"])
|
||||||
|
AC_MSG_CHECKING([whether lstat is available])
|
||||||
|
AC_MSG_RESULT([${have_lstat}])
|
||||||
|
|
||||||
|
if test "x${have_lstat}" = "xyes" ; then
|
||||||
|
AC_DEFINE([EFL_HAVE_LSTAT], [1], [Define to mention that lstat syscall is supported])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Check for inotify specificity
|
### Check for inotify specificity
|
||||||
have_inotify="no"
|
have_inotify="no"
|
||||||
have_notify_win32="no"
|
have_notify_win32="no"
|
||||||
|
|
|
@ -101,6 +101,39 @@ _eio_file_unlink_error(void *data, Ecore_Thread *thread __UNUSED__)
|
||||||
_eio_unlink_free(l);
|
_eio_unlink_free(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_eio_file_struct_2_eina(Eina_Stat *es, struct stat *st)
|
||||||
|
{
|
||||||
|
es->dev = st->st_dev;
|
||||||
|
es->ino = st->st_ino;
|
||||||
|
es->mode = st->st_mode;
|
||||||
|
es->nlink = st->st_nlink;
|
||||||
|
es->uid = st->st_uid;
|
||||||
|
es->gid = st->st_gid;
|
||||||
|
es->rdev = st->st_rdev;
|
||||||
|
es->size = st->st_size;
|
||||||
|
es->blksize = st->st_blksize;
|
||||||
|
es->blocks = st->st_blocks;
|
||||||
|
es->atime = st->st_atime;
|
||||||
|
es->mtime = st->st_mtime;
|
||||||
|
es->ctime = st->st_ctime;
|
||||||
|
#ifdef _STAT_VER_LINUX
|
||||||
|
# if (defined __USE_MISC && defined st_mtime)
|
||||||
|
es->atimensec = st->st_atim.tv_nsec;
|
||||||
|
es->mtimensec = st->st_mtim.tv_nsec;
|
||||||
|
es->ctimensec = st->st_ctim.tv_nsec;
|
||||||
|
# else
|
||||||
|
es->atimensec = st->st_atimensec;
|
||||||
|
es->mtimensec = st->st_mtimensec;
|
||||||
|
es->ctimensec = st->st_ctimensec;
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
es->atimensec = 0;
|
||||||
|
es->mtimensec = 0;
|
||||||
|
es->ctimensec = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_eio_file_stat(void *data, Ecore_Thread *thread)
|
_eio_file_stat(void *data, Ecore_Thread *thread)
|
||||||
{
|
{
|
||||||
|
@ -110,37 +143,23 @@ _eio_file_stat(void *data, Ecore_Thread *thread)
|
||||||
if (stat(s->path, &buf) != 0)
|
if (stat(s->path, &buf) != 0)
|
||||||
eio_file_thread_error(&s->common, thread);
|
eio_file_thread_error(&s->common, thread);
|
||||||
|
|
||||||
s->buffer.dev = buf.st_dev;
|
_eio_file_struct_2_eina(&s->buffer, &buf);
|
||||||
s->buffer.ino = buf.st_ino;
|
|
||||||
s->buffer.mode = buf.st_mode;
|
|
||||||
s->buffer.nlink = buf.st_nlink;
|
|
||||||
s->buffer.uid = buf.st_uid;
|
|
||||||
s->buffer.gid = buf.st_gid;
|
|
||||||
s->buffer.rdev = buf.st_rdev;
|
|
||||||
s->buffer.size = buf.st_size;
|
|
||||||
s->buffer.blksize = buf.st_blksize;
|
|
||||||
s->buffer.blocks = buf.st_blocks;
|
|
||||||
s->buffer.atime = buf.st_atime;
|
|
||||||
s->buffer.mtime = buf.st_mtime;
|
|
||||||
s->buffer.ctime = buf.st_ctime;
|
|
||||||
#ifdef _STAT_VER_LINUX
|
|
||||||
# if (defined __USE_MISC && defined st_mtime)
|
|
||||||
s->buffer.atimensec = buf.st_atim.tv_nsec;
|
|
||||||
s->buffer.mtimensec = buf.st_mtim.tv_nsec;
|
|
||||||
s->buffer.ctimensec = buf.st_ctim.tv_nsec;
|
|
||||||
# else
|
|
||||||
s->buffer.atimensec = buf.st_atimensec;
|
|
||||||
s->buffer.mtimensec = buf.st_mtimensec;
|
|
||||||
s->buffer.ctimensec = buf.st_ctimensec;
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
s->buffer.atimensec = 0;
|
|
||||||
s->buffer.mtimensec = 0;
|
|
||||||
s->buffer.ctimensec = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EFL_HAVE_LSTAT
|
||||||
|
static void
|
||||||
|
_eio_file_lstat(void *data, Ecore_Thread *thread)
|
||||||
|
{
|
||||||
|
Eio_File_Stat *s = data;
|
||||||
|
struct stat buf;
|
||||||
|
|
||||||
|
if (lstat(s->path, &buf) != 0)
|
||||||
|
eio_file_thread_error(&s->common, thread);
|
||||||
|
|
||||||
|
_eio_file_struct_2_eina(&s->buffer, &buf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_eio_stat_free(Eio_File_Stat *s)
|
_eio_stat_free(Eio_File_Stat *s)
|
||||||
{
|
{
|
||||||
|
@ -394,6 +413,39 @@ eio_file_direct_stat(const char *path,
|
||||||
return &s->common;
|
return &s->common;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eio_File *
|
||||||
|
eio_file_direct_lstat(const char *path,
|
||||||
|
Eio_Stat_Cb done_cb,
|
||||||
|
Eio_Error_Cb error_cb,
|
||||||
|
const void *data)
|
||||||
|
{
|
||||||
|
#ifdef EFL_HAVE_LSTAT
|
||||||
|
Eio_File_Stat *s = NULL;
|
||||||
|
|
||||||
|
if (!path || !done_cb || !error_cb)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
s = malloc(sizeof (Eio_File_Stat));
|
||||||
|
if (!s) return NULL;
|
||||||
|
|
||||||
|
s->path = eina_stringshare_add(path);
|
||||||
|
s->done_cb = done_cb;
|
||||||
|
|
||||||
|
if (!eio_file_set(&s->common,
|
||||||
|
NULL,
|
||||||
|
error_cb,
|
||||||
|
data,
|
||||||
|
_eio_file_lstat,
|
||||||
|
_eio_file_stat_done,
|
||||||
|
_eio_file_stat_error))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return &s->common;
|
||||||
|
#else
|
||||||
|
return eio_file_direct_stat(path, done_cb, error_cb, data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
|
Loading…
Reference in New Issue