From 3a3a9f5cc15ccfc9f171f8916c5a0470a3585319 Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Sat, 8 Aug 2015 14:52:04 -0700 Subject: Add wreaddir_for_dirs function Eliminates some stat calls, speeding up wildcard expansion --- src/wutil.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/wutil.cpp') diff --git a/src/wutil.cpp b/src/wutil.cpp index b5689eec..19645042 100644 --- a/src/wutil.cpp +++ b/src/wutil.cpp @@ -115,6 +115,40 @@ bool wreaddir(DIR *dir, std::wstring &out_name) return true; } +bool wreaddir_for_dirs(DIR *dir, wcstring *out_name) +{ + struct dirent *result = NULL; + while (result == NULL) + { + struct dirent *d = readdir(dir); + if (!d) break; + +#if HAVE_STRUCT_DIRENT_D_TYPE + switch (d->d_type) + { + // These may be directories + case DT_DIR: + case DT_LNK: + case DT_UNKNOWN: + result = d; + break; + + // Nothing else can + default: + break; + } +#else + /* We can't determine if it's a directory or not, so just return it */ + result = d; +#endif + } + if (result && out_name) + { + *out_name = str2wcstring(result->d_name); + } + return result != NULL; +} + wchar_t *wgetcwd(wchar_t *buff, size_t sz) { -- cgit v1.2.3