file_stat = std::make_unique<csync_file_stat_t>();
file_stat->path = path.toUtf8();
+ const auto isDirectory = handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
+
if (vfs && vfs->statTypeVirtualFile(file_stat.get(), &handle->ffd)) {
// all good
- } else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) {
+ } else if ((handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) && !isDirectory) {
// Detect symlinks, and treat junctions as symlinks too.
if (handle->ffd.dwReserved0 == IO_REPARSE_TAG_SYMLINK
|| handle->ffd.dwReserved0 == IO_REPARSE_TAG_MOUNT_POINT) {
// but will also treat them normally for now.
file_stat->type = ItemTypeFile;
}
- } else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE
- || handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE
- ) {
+ } else if ((handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE || handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE) &&
+ !isDirectory) {
file_stat->type = ItemTypeSkip;
- } else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+ } else if (isDirectory) {
file_stat->type = ItemTypeDirectory;
} else {
file_stat->type = ItemTypeFile;