From 082e26d5ba9cb1de2c658f61ff14fa21425499ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=BCller?= Date: Fri, 4 Feb 2022 16:30:12 +0100 Subject: [PATCH] Reduce system API calls when listing directory contents --- src/base/system.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/base/system.cpp b/src/base/system.cpp index b4f596003..39230104a 100644 --- a/src/base/system.cpp +++ b/src/base/system.cpp @@ -2151,7 +2151,7 @@ void fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user) { WideCharToMultiByte(CP_UTF8, 0, finddata.cFileName, -1, buffer2, sizeof(buffer2), NULL, NULL); str_copy(buffer + length, buffer2, (int)sizeof(buffer) - length); - if(cb(buffer2, fs_is_dir(buffer), type, user)) + if(cb(buffer2, (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0, type, user)) break; } while(FindNextFileW(handle, &finddata)); @@ -2171,7 +2171,7 @@ void fs_listdir(const char *dir, FS_LISTDIR_CALLBACK cb, int type, void *user) while((entry = readdir(d)) != NULL) { str_copy(buffer + length, entry->d_name, (int)sizeof(buffer) - length); - if(cb(entry->d_name, fs_is_dir(buffer), type, user)) + if(cb(entry->d_name, entry->d_type == DT_UNKNOWN ? fs_is_dir(buffer) : entry->d_type == DT_DIR, type, user)) break; } @@ -2211,7 +2211,7 @@ void fs_listdir_fileinfo(const char *dir, FS_LISTDIR_CALLBACK_FILEINFO cb, int t info.m_TimeCreated = filetime_to_unixtime(&finddata.ftCreationTime); info.m_TimeModified = filetime_to_unixtime(&finddata.ftLastWriteTime); - if(cb(&info, fs_is_dir(buffer), type, user)) + if(cb(&info, (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0, type, user)) break; } while(FindNextFileW(handle, &finddata)); @@ -2240,7 +2240,7 @@ void fs_listdir_fileinfo(const char *dir, FS_LISTDIR_CALLBACK_FILEINFO cb, int t info.m_TimeCreated = created; info.m_TimeModified = modified; - if(cb(&info, fs_is_dir(buffer), type, user)) + if(cb(&info, entry->d_type == DT_UNKNOWN ? fs_is_dir(buffer) : entry->d_type == DT_DIR, type, user)) break; }