mirror of
https://github.com/luau-lang/luau.git
synced 2025-05-04 10:33:46 +01:00
Improve POSIX compliance in CLI/FileUtils.cpp
This commit is contained in:
parent
225a4a0870
commit
324a66a104
1 changed files with 10 additions and 7 deletions
|
@ -165,11 +165,14 @@ static bool traverseDirectoryRec(const std::string& path, const std::function<vo
|
||||||
{
|
{
|
||||||
joinPaths(buf, path.c_str(), data.d_name);
|
joinPaths(buf, path.c_str(), data.d_name);
|
||||||
|
|
||||||
int type = data.d_type;
|
#if defined(ATTOIF)
|
||||||
int mode = -1;
|
mode_t mode = ATTOIF(data.d_type);
|
||||||
|
#else
|
||||||
|
mode_t mode = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
// we need to stat DT_UNKNOWN to be able to tell the type
|
// we need to stat an UNKNOWN to be able to tell the type
|
||||||
if (type == DT_UNKNOWN)
|
if ((mode & S_IFMT) == 0)
|
||||||
{
|
{
|
||||||
struct stat st = {};
|
struct stat st = {};
|
||||||
#ifdef _ATFILE_SOURCE
|
#ifdef _ATFILE_SOURCE
|
||||||
|
@ -181,15 +184,15 @@ static bool traverseDirectoryRec(const std::string& path, const std::function<vo
|
||||||
mode = st.st_mode;
|
mode = st.st_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == DT_DIR || mode == S_IFDIR)
|
if (mode & S_IFDIR)
|
||||||
{
|
{
|
||||||
traverseDirectoryRec(buf, callback);
|
traverseDirectoryRec(buf, callback);
|
||||||
}
|
}
|
||||||
else if (type == DT_REG || mode == S_IFREG)
|
else if (mode & S_IFREG)
|
||||||
{
|
{
|
||||||
callback(buf);
|
callback(buf);
|
||||||
}
|
}
|
||||||
else if (type == DT_LNK || mode == S_IFLNK)
|
else if (mode & S_IFLNK)
|
||||||
{
|
{
|
||||||
// Skip symbolic links to avoid handling cycles
|
// Skip symbolic links to avoid handling cycles
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue