mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-03-03 15:21:19 +00:00
- Fixed wrong _stat() function being used.
- Use the internal _stat version unconditionally since it's broken on Windows. # Conflicts: # src/cmdlib.cpp # src/win32/i_system.cpp
This commit is contained in:
parent
70ceced6b0
commit
fe1ac50740
2 changed files with 15 additions and 13 deletions
|
@ -145,6 +145,10 @@ void ReplaceString (char **ptr, const char *str)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
int my_wstat64(const wchar_t *path, struct _stat64 *buffer);
|
||||||
|
#endif
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FileExists
|
// FileExists
|
||||||
|
@ -195,8 +199,8 @@ bool DirEntryExists(const char *pathname, bool *isdir)
|
||||||
#else
|
#else
|
||||||
// Windows must use the wide version of stat to preserve non-standard paths.
|
// Windows must use the wide version of stat to preserve non-standard paths.
|
||||||
auto wstr = WideString(pathname);
|
auto wstr = WideString(pathname);
|
||||||
struct _stat64i32 info;
|
struct _stat64 info;
|
||||||
bool res = _wstat64i32(wstr.c_str(), &info) == 0;
|
bool res = my_wstat64(wstr.c_str(), &info) == 0;
|
||||||
#endif
|
#endif
|
||||||
if (isdir) *isdir = !!(info.st_mode & S_IFDIR);
|
if (isdir) *isdir = !!(info.st_mode & S_IFDIR);
|
||||||
return res;
|
return res;
|
||||||
|
@ -204,9 +208,9 @@ bool DirEntryExists(const char *pathname, bool *isdir)
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// DirEntryExists
|
// GetFileInfo
|
||||||
//
|
//
|
||||||
// Returns true if the given path exists, be it a directory or a file.
|
// Returns true if the file info can be retrieved.
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
|
@ -221,8 +225,8 @@ bool GetFileInfo(const char* pathname, size_t *size, time_t *time)
|
||||||
#else
|
#else
|
||||||
// Windows must use the wide version of stat to preserve non-standard paths.
|
// Windows must use the wide version of stat to preserve non-standard paths.
|
||||||
auto wstr = WideString(pathname);
|
auto wstr = WideString(pathname);
|
||||||
struct _stat64i32 info;
|
struct _stat64 info;
|
||||||
bool res = _wstat64i32(wstr.c_str(), &info) == 0;
|
bool res = my_wstat64(wstr.c_str(), &info) == 0;
|
||||||
#endif
|
#endif
|
||||||
if (!res || (info.st_mode & S_IFDIR)) return false;
|
if (!res || (info.st_mode & S_IFDIR)) return false;
|
||||||
if (size) *size = info.st_size;
|
if (size) *size = info.st_size;
|
||||||
|
|
|
@ -1233,18 +1233,16 @@ FString I_GetLongPathName(const FString &shortpath)
|
||||||
return longpath;
|
return longpath;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _USING_V110_SDK71_
|
#ifdef _WIN32
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// _stat64i32
|
// _stat64
|
||||||
//
|
//
|
||||||
// Work around an issue where stat() function doesn't work
|
// Work around an issue where _stat() function doesn't work.
|
||||||
// with Windows XP compatible toolset.
|
|
||||||
// It uses GetFileInformationByHandleEx() which requires Windows Vista.
|
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int _wstat64i32(const wchar_t *path, struct _stat64i32 *buffer)
|
int my_wstat64(const wchar_t *path, struct _stat64 *buffer)
|
||||||
{
|
{
|
||||||
WIN32_FILE_ATTRIBUTE_DATA data;
|
WIN32_FILE_ATTRIBUTE_DATA data;
|
||||||
if(!GetFileAttributesExW(path, GetFileExInfoStandard, &data))
|
if(!GetFileAttributesExW(path, GetFileExInfoStandard, &data))
|
||||||
|
@ -1257,7 +1255,7 @@ int _wstat64i32(const wchar_t *path, struct _stat64i32 *buffer)
|
||||||
buffer->st_nlink = 1;
|
buffer->st_nlink = 1;
|
||||||
buffer->st_uid = 0;
|
buffer->st_uid = 0;
|
||||||
buffer->st_gid = 0;
|
buffer->st_gid = 0;
|
||||||
buffer->st_size = data.nFileSizeLow;
|
buffer->st_size = ((uint64_t)data.nFileSizeHigh << 32) + data.nFileSizeLow;
|
||||||
buffer->st_atime = (*(uint64_t*)&data.ftLastAccessTime) / 10000000 - 11644473600LL;
|
buffer->st_atime = (*(uint64_t*)&data.ftLastAccessTime) / 10000000 - 11644473600LL;
|
||||||
buffer->st_mtime = (*(uint64_t*)&data.ftLastWriteTime) / 10000000 - 11644473600LL;
|
buffer->st_mtime = (*(uint64_t*)&data.ftLastWriteTime) / 10000000 - 11644473600LL;
|
||||||
buffer->st_ctime = (*(uint64_t*)&data.ftCreationTime) / 10000000 - 11644473600LL;
|
buffer->st_ctime = (*(uint64_t*)&data.ftCreationTime) / 10000000 - 11644473600LL;
|
||||||
|
|
Loading…
Reference in a new issue