forked from enlightenment/efl
eina: add sub-second resolution correctness.
SVN revision: 63787
This commit is contained in:
parent
49fa59342f
commit
d1999e9125
|
@ -117,6 +117,9 @@ struct _Eina_File
|
||||||
unsigned long long length;
|
unsigned long long length;
|
||||||
time_t mtime;
|
time_t mtime;
|
||||||
ino_t inode;
|
ino_t inode;
|
||||||
|
#ifdef _STAT_VER_LINUX
|
||||||
|
unsigned long int mtime_nsec;
|
||||||
|
#endif
|
||||||
|
|
||||||
int refcount;
|
int refcount;
|
||||||
int global_refcount;
|
int global_refcount;
|
||||||
|
@ -473,6 +476,24 @@ _eina_file_map_rule_apply(Eina_File_Populate rule, void *addr, unsigned long int
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_eina_file_timestamp_compare(Eina_File *f, struct stat *st)
|
||||||
|
{
|
||||||
|
if (f->mtime != st->st_mtime) return EINA_FALSE;
|
||||||
|
if (f->length != (unsigned long long) st->st_size) return EINA_FALSE;
|
||||||
|
if (f->inode != st->st_ino) return EINA_FALSE;
|
||||||
|
#ifdef _STAT_VER_LINUX
|
||||||
|
# if (defined __USE_MISC && defined st_mtime)
|
||||||
|
if (f->mtime_nsec != (unsigned long int)st->st_mtim.tv_nsec)
|
||||||
|
return EINA_FALSE;
|
||||||
|
# else
|
||||||
|
if (f->mtime_nsec != (unsigned long int)st->st_mtimensec)
|
||||||
|
return EINA_FALSE;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
eina_file_init(void)
|
eina_file_init(void)
|
||||||
{
|
{
|
||||||
|
@ -785,11 +806,7 @@ eina_file_open(const char *filename, Eina_Bool shared)
|
||||||
eina_lock_take(&_eina_file_lock_cache);
|
eina_lock_take(&_eina_file_lock_cache);
|
||||||
|
|
||||||
file = eina_hash_find(_eina_file_cache, filename);
|
file = eina_hash_find(_eina_file_cache, filename);
|
||||||
if ((file) &&
|
if ((file) && _eina_file_timestamp_compare(file, &file_stat))
|
||||||
((file->mtime != file_stat.st_mtime) ||
|
|
||||||
(file->length != (unsigned long long) file_stat.st_size) ||
|
|
||||||
(file->inode != file_stat.st_ino)))
|
|
||||||
// FIXME: handle sub-second resolution correctness
|
|
||||||
{
|
{
|
||||||
file->delete_me = EINA_TRUE;
|
file->delete_me = EINA_TRUE;
|
||||||
eina_hash_del(_eina_file_cache, file->filename, file);
|
eina_hash_del(_eina_file_cache, file->filename, file);
|
||||||
|
|
Loading…
Reference in New Issue