Browse Source

engine: common: filesystem: speed up directory existense check on POSIX by using stat() instead of opendir()

pull/2/head
Alibek Omarov 3 years ago
parent
commit
4fbd96d201
  1. 23
      engine/common/filesystem.c

23
engine/common/filesystem.c

@ -2477,7 +2477,7 @@ qboolean FS_SysFileExists( const char *path, qboolean caseinsensitive )
close( desc ); close( desc );
return true; return true;
#else #elif XASH_POSIX
int ret; int ret;
struct stat buf; struct stat buf;
@ -2495,6 +2495,8 @@ qboolean FS_SysFileExists( const char *path, qboolean caseinsensitive )
return false; return false;
return S_ISREG( buf.st_mode ); return S_ISREG( buf.st_mode );
#else
#error
#endif #endif
} }
@ -2529,23 +2531,18 @@ qboolean FS_SysFolderExists( const char *path )
DWORD dwFlags = GetFileAttributes( path ); DWORD dwFlags = GetFileAttributes( path );
return ( dwFlags != -1 ) && ( dwFlags & FILE_ATTRIBUTE_DIRECTORY ); return ( dwFlags != -1 ) && ( dwFlags & FILE_ATTRIBUTE_DIRECTORY );
#else #elif XASH_POSIX
DIR *dir = opendir( path ); struct stat buf;
if( dir ) if( stat( path, &buf ) < 0 )
{
closedir( dir );
return true;
}
else if( (errno == ENOENT) || (errno == ENOTDIR) )
{
return false;
}
else
{ {
Con_Reportf( S_ERROR "FS_SysFolderExists: problem while opening dir: %s\n", strerror( errno )); Con_Reportf( S_ERROR "FS_SysFolderExists: problem while opening dir: %s\n", strerror( errno ));
return false; return false;
} }
return S_ISDIR( buf.st_mode );
#else
#error
#endif #endif
} }

Loading…
Cancel
Save