FileNameVector getDirContents(const std::string &path, const mode_t &mode)
{
FileNameVector result;
- dirent tmp, *ptr;
+ dirent *ptr;
int err;
auto dir = makeUnique(opendir(path.c_str()), closedir);
}
while (true) {
- if (readdir_r(dir.get(), &tmp, &ptr)) {
- err = errno;
- ThrowMsg(FS::Exception::FileError, "Error reading directory: " << GetErrnoString(err));
- }
-
- if (!ptr)
+ errno = 0;
+ ptr = readdir(dir.get());
+
+ if (!ptr) {
+ if (errno) {
+ err = errno;
+ ThrowMsg(FS::Exception::FileError, "Error reading directory: " << GetErrnoString(err));
+ }
break;
-
+ }
+
struct stat finfo;
if (0 > fstatat(dirfd(dir.get()), ptr->d_name, &finfo, AT_SYMLINK_NOFOLLOW)) {
ThrowMsg(FS::Exception::FileError, "Error reading: " << ptr->d_name);