Eina: use stat64() instead of GetFileAttributesEx()

SVN revision: 69067
This commit is contained in:
Vincent Torri 2012-03-08 17:58:44 +00:00
parent 531668d2ca
commit 2872041d17
1 changed files with 43 additions and 16 deletions

View File

@ -37,6 +37,9 @@ extern "C"
void *alloca (size_t); void *alloca (size_t);
#endif #endif
#include <sys/types.h>
#include <sys/stat.h>
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#undef WIN32_LEAN_AND_MEAN #undef WIN32_LEAN_AND_MEAN
@ -998,7 +1001,7 @@ eina_file_close(Eina_File *file)
eina_hash_del(_eina_file_cache, file->filename, file); eina_hash_del(_eina_file_cache, file->filename, file);
_eina_file_real_close(file); _eina_file_real_close(file);
eina_lock_release(&_eina_file_lock_cache); eina_lock_release(&_eina_file_lock_cache);
} }
@ -1023,6 +1026,16 @@ eina_file_filename_get(Eina_File *file)
return file->filename; return file->filename;
} }
EAPI Eina_Iterator *eina_file_xattr_get(Eina_File *file __UNUSED__)
{
return NULL;
}
EAPI Eina_Iterator *eina_file_xattr_value_get(Eina_File *file __UNUSED__)
{
return NULL;
}
EAPI void * EAPI void *
eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__) eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__)
{ {
@ -1156,32 +1169,46 @@ eina_file_map_free(Eina_File *file, void *map)
} }
EAPI int EAPI int
eina_file_statat(void *container, Eina_File_Direct_Info *info, Eina_Stat *st) eina_file_statat(void *container __UNUSED__, Eina_File_Direct_Info *info, Eina_Stat *st)
{ {
WIN32_FILE_ATTRIBUTE_DATA fad; struct __stat64 buf;
ULARGE_INTEGER length;
ULARGE_INTEGER mtime;
ULARGE_INTEGER atime;
EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1); EINA_SAFETY_ON_NULL_RETURN_VAL(info, -1);
EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1); EINA_SAFETY_ON_NULL_RETURN_VAL(st, -1);
if (!GetFileAttributesEx(info->path, GetFileExInfoStandard, &fad)) if (stat64(info->path, &buf))
{ {
if (info->type != EINA_FILE_LNK) if (info->type != EINA_FILE_LNK)
info->type = EINA_FILE_UNKNOWN; info->type = EINA_FILE_UNKNOWN;
return -1; return -1;
} }
length.u.LowPart = fad.nFileSizeLow; if (info->type == EINA_FILE_UNKNOWN)
length.u.HighPart = fad.nFileSizeHigh; {
atime.u.LowPart = fad.ftLastAccessTime.dwLowDateTime; if (S_ISREG(buf.st_mode))
atime.u.HighPart = fad.ftLastAccessTime.dwHighDateTime; info->type = EINA_FILE_REG;
mtime.u.LowPart = fad.ftLastWriteTime.dwLowDateTime; else if (S_ISDIR(buf.st_mode))
mtime.u.HighPart = fad.ftLastWriteTime.dwHighDateTime; info->type = EINA_FILE_DIR;
else
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 = 0;
st->blocks = 0;
st->atime = buf.st_atime;
st->mtime = buf.st_mtime;
st->ctime = buf.st_ctime;
st->atimensec = 0;
st->mtimensec = 0;
st->ctimensec = 0;
st->size = length.QuadPart;
st->atime = atime.QuadPart;
st->mtime = mtime.QuadPart;
return 0; return 0;
} }