forked from enlightenment/efl
eina: introduce Eina_Stat to prevent issue when building with different config option.
SVN revision: 68315
This commit is contained in:
parent
6107c5b96e
commit
b693dd6035
|
@ -91,6 +91,12 @@
|
||||||
*/
|
*/
|
||||||
typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info;
|
typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef Eina_Stat
|
||||||
|
* A typedef to #_Eina_Stat.
|
||||||
|
*/
|
||||||
|
typedef struct _Eina_Stat Eina_Stat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef Eina_File_Dir_List_Cb
|
* @typedef Eina_File_Dir_List_Cb
|
||||||
* Type for a callback to be called when iterating over the files of a
|
* Type for a callback to be called when iterating over the files of a
|
||||||
|
@ -149,6 +155,30 @@ struct _Eina_File_Direct_Info
|
||||||
char path[EINA_PATH_MAX]; /**< the path */
|
char path[EINA_PATH_MAX]; /**< the path */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @struct _Eina_Stat
|
||||||
|
* A structure to store informations of a path.
|
||||||
|
*/
|
||||||
|
struct _Eina_Stat
|
||||||
|
{
|
||||||
|
unsigned long int dev;
|
||||||
|
unsigned long int ino;
|
||||||
|
unsigned int mode;
|
||||||
|
unsigned int nlink;
|
||||||
|
unsigned int uid;
|
||||||
|
unsigned int gid;
|
||||||
|
unsigned long int rdev;
|
||||||
|
unsigned long int size;
|
||||||
|
unsigned long int blksize;
|
||||||
|
unsigned long int blocks;
|
||||||
|
unsigned long int atime;
|
||||||
|
unsigned long int atimensec;
|
||||||
|
unsigned long int mtime;
|
||||||
|
unsigned long int mtimensec;
|
||||||
|
unsigned long int ctime;
|
||||||
|
unsigned long int ctimensec;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @def EINA_FILE_DIR_LIST_CB
|
* @def EINA_FILE_DIR_LIST_CB
|
||||||
* @brief cast to an #Eina_File_Dir_List_Cb.
|
* @brief cast to an #Eina_File_Dir_List_Cb.
|
||||||
|
@ -262,7 +292,7 @@ EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT E
|
||||||
* @see eina_file_direct_ls()
|
* @see eina_file_direct_ls()
|
||||||
* @see eina_file_stat_ls()
|
* @see eina_file_stat_ls()
|
||||||
*/
|
*/
|
||||||
EAPI int eina_file_stat(void *container, Eina_File_Direct_Info *info, struct stat *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2, 3);
|
EAPI int eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *buf) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2, 3);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get an iterator to list the content of a directory, with direct
|
* @brief Get an iterator to list the content of a directory, with direct
|
||||||
|
|
|
@ -362,14 +362,14 @@ _eina_file_direct_ls_iterator_free(Eina_File_Direct_Iterator *it)
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
|
_eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
|
||||||
{
|
{
|
||||||
struct stat st;
|
Eina_Stat st;
|
||||||
|
|
||||||
if (!_eina_file_direct_ls_iterator_next(it, data))
|
if (!_eina_file_direct_ls_iterator_next(it, data))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
|
||||||
if (it->info.type == EINA_FILE_UNKNOWN)
|
if (it->info.type == EINA_FILE_UNKNOWN)
|
||||||
{
|
{
|
||||||
if (eina_file_stat(it->dirp, &it->info, &st) != 0)
|
if (eina_file_statat(it->dirp, &it->info, &st) != 0)
|
||||||
it->info.type = EINA_FILE_UNKNOWN;
|
it->info.type = EINA_FILE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1276,20 +1276,21 @@ eina_file_mmap_faulty(void *addr, long page_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI int
|
EAPI int
|
||||||
eina_file_stat(void *container, Eina_File_Direct_Info *info, struct stat *buf)
|
eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *st)
|
||||||
{
|
{
|
||||||
|
struct stat buf;
|
||||||
#ifdef HAVE_FSTATAT
|
#ifdef HAVE_FSTATAT
|
||||||
int fd;
|
int fd;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1);
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(buf, -1);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1);
|
||||||
|
|
||||||
#ifdef HAVE_FSTATAT
|
#ifdef HAVE_FSTATAT
|
||||||
fd = dirfd(container);
|
fd = dirfd(container);
|
||||||
if (fstatat(fd, info->path + info->name_start, buf, 0))
|
if (fstatat(fd, info->path + info->name_start, &buf, 0))
|
||||||
#else
|
#else
|
||||||
if (stat(info->path, buf))
|
if (stat(info->path, &buf))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (info->type != EINA_FILE_LNK)
|
if (info->type != EINA_FILE_LNK)
|
||||||
|
@ -1299,23 +1300,51 @@ eina_file_stat(void *container, Eina_File_Direct_Info *info, struct stat *buf)
|
||||||
|
|
||||||
if (info->type == EINA_FILE_UNKNOWN)
|
if (info->type == EINA_FILE_UNKNOWN)
|
||||||
{
|
{
|
||||||
if (S_ISREG(buf->st_mode))
|
if (S_ISREG(buf.st_mode))
|
||||||
info->type = EINA_FILE_REG;
|
info->type = EINA_FILE_REG;
|
||||||
else if (S_ISDIR(buf->st_mode))
|
else if (S_ISDIR(buf.st_mode))
|
||||||
info->type = EINA_FILE_DIR;
|
info->type = EINA_FILE_DIR;
|
||||||
else if (S_ISCHR(buf->st_mode))
|
else if (S_ISCHR(buf.st_mode))
|
||||||
info->type = EINA_FILE_CHR;
|
info->type = EINA_FILE_CHR;
|
||||||
else if (S_ISBLK(buf->st_mode))
|
else if (S_ISBLK(buf.st_mode))
|
||||||
info->type = EINA_FILE_BLK;
|
info->type = EINA_FILE_BLK;
|
||||||
else if (S_ISFIFO(buf->st_mode))
|
else if (S_ISFIFO(buf.st_mode))
|
||||||
info->type = EINA_FILE_FIFO;
|
info->type = EINA_FILE_FIFO;
|
||||||
else if (S_ISLNK(buf->st_mode))
|
else if (S_ISLNK(buf.st_mode))
|
||||||
info->type = EINA_FILE_LNK;
|
info->type = EINA_FILE_LNK;
|
||||||
else if (S_ISSOCK(buf->st_mode))
|
else if (S_ISSOCK(buf.st_mode))
|
||||||
info->type = EINA_FILE_SOCK;
|
info->type = EINA_FILE_SOCK;
|
||||||
else
|
else
|
||||||
info->type = EINA_FILE_UNKNOWN;
|
info->type = EINA_FILE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
st->dev = buf.st_dev;
|
||||||
|
st->ino = buf.st_ino;
|
||||||
|
st->mode = buf.st_mode;
|
||||||
|
st->nlink = buf.st_nlink;
|
||||||
|
st->uid = buf.st_uid;
|
||||||
|
st->gid = buf.st_gid;
|
||||||
|
st->rdev = buf.st_rdev;
|
||||||
|
st->size = buf.st_size;
|
||||||
|
st->blksize = buf.st_blksize;
|
||||||
|
st->blocks = buf.st_blocks;
|
||||||
|
st->atime = buf.st_atime;
|
||||||
|
st->mtime = buf.st_mtime;
|
||||||
|
st->ctime = buf.st_ctime;
|
||||||
|
#ifdef _STAT_VER_LINUX
|
||||||
|
# if (defined __USE_MISC && defined st_mtime)
|
||||||
|
st->atimensec = buf.st_atim.tv_nsec;
|
||||||
|
st->mtimensec = buf.st_mtim.tv_nsec;
|
||||||
|
st->ctimensec = buf.st_ctim.tv_nsec;
|
||||||
|
# else
|
||||||
|
st->atimensec = buf.st_atimensec;
|
||||||
|
st->mtimensec = buf.st_mtimensec;
|
||||||
|
st->ctimensec = buf.st_ctimensec;
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
st->atimensec = 0;
|
||||||
|
st->mtimensec = 0;
|
||||||
|
st->ctimensec = 0;
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue