From 4fbd96d20116fd420aec3e2586e252636c546e7e Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 5 May 2022 05:03:47 +0300 Subject: [PATCH] engine: common: filesystem: speed up directory existense check on POSIX by using stat() instead of opendir() --- engine/common/filesystem.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/engine/common/filesystem.c b/engine/common/filesystem.c index 01bd4676..0438b153 100644 --- a/engine/common/filesystem.c +++ b/engine/common/filesystem.c @@ -2477,7 +2477,7 @@ qboolean FS_SysFileExists( const char *path, qboolean caseinsensitive ) close( desc ); return true; -#else +#elif XASH_POSIX int ret; struct stat buf; @@ -2495,6 +2495,8 @@ qboolean FS_SysFileExists( const char *path, qboolean caseinsensitive ) return false; return S_ISREG( buf.st_mode ); +#else +#error #endif } @@ -2529,23 +2531,18 @@ qboolean FS_SysFolderExists( const char *path ) DWORD dwFlags = GetFileAttributes( path ); return ( dwFlags != -1 ) && ( dwFlags & FILE_ATTRIBUTE_DIRECTORY ); -#else - DIR *dir = opendir( path ); +#elif XASH_POSIX + struct stat buf; - if( dir ) - { - closedir( dir ); - return true; - } - else if( (errno == ENOENT) || (errno == ENOTDIR) ) + if( stat( path, &buf ) < 0 ) { + Con_Reportf( S_ERROR "FS_SysFolderExists: problem while opening dir: %s\n", strerror( errno )); return false; } - else - { - Con_Reportf( S_ERROR "FS_SysFolderExists: problem while opening dir: %s\n", strerror( errno ) ); - return false; - } + + return S_ISDIR( buf.st_mode ); +#else +#error #endif }