diff --git a/repertory/librepertory/src/drives/fuse/remotefuse/remote_fuse_drive.cpp b/repertory/librepertory/src/drives/fuse/remotefuse/remote_fuse_drive.cpp index f2256f3e..45de3fa5 100644 --- a/repertory/librepertory/src/drives/fuse/remotefuse/remote_fuse_drive.cpp +++ b/repertory/librepertory/src/drives/fuse/remotefuse/remote_fuse_drive.cpp @@ -382,7 +382,7 @@ auto remote_fuse_drive::readdir_impl(std::string api_path, void *buf, fuse_fill_dir_t fuse_fill_dir, off_t offset, struct fuse_file_info *f_info, - fuse_readdir_flags /*flags*/) + fuse_readdir_flags /* flags */) -> api_error { #else // FUSE_USE_VERSION < 30 auto remote_fuse_drive::readdir_impl(std::string api_path, void *buf, @@ -397,27 +397,31 @@ auto remote_fuse_drive::readdir_impl(std::string api_path, void *buf, while ((res = remote_instance_->fuse_readdir( api_path.c_str(), static_cast(offset), f_info->fh, item_path)) == 0) { - auto stat_res{0}; std::unique_ptr p_stat{nullptr}; + int stat_res{0}; if ((item_path == ".") || (item_path == "..")) { p_stat = std::make_unique(); std::memset(p_stat.get(), 0, sizeof(struct stat)); if (item_path == ".") { - stat_res = stat(get_mount_location().c_str(), p_stat.get()); + stat_res = + stat(utils::path::combine(get_mount_location(), {api_path}).c_str(), + p_stat.get()); } else { stat_res = - stat(utils::path::get_parent_path(get_mount_location()).c_str(), + stat(utils::path::get_parent_path( + utils::path::combine(get_mount_location(), {api_path})) + .c_str(), p_stat.get()); } + + if (stat_res != 0) { + res = stat_res; + break; + } } else { item_path = utils::path::strip_to_file_name(item_path); } - if (stat_res != 0) { - res = stat_res; - break; - } - #if FUSE_USE_VERSION >= 30 if (fuse_fill_dir(buf, item_path.c_str(), p_stat.get(), ++offset, FUSE_FILL_DIR_PLUS) != 0) { @@ -426,10 +430,10 @@ auto remote_fuse_drive::readdir_impl(std::string api_path, void *buf, #endif // FUSE_USE_VERSION >= 30 break; } + } - if (res == -120) { - res = 0; - } + if (res == -120) { + res = 0; } return utils::to_api_error(res);