From 60cbb719e7e9b14d4966efcead89bca4fc022c8e Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Sat, 20 Feb 2016 15:04:07 -0500 Subject: Deduplicate resource release functions --- src/operations.cc | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/operations.cc b/src/operations.cc index 2f1a103..375a039 100644 --- a/src/operations.cc +++ b/src/operations.cc @@ -41,14 +41,6 @@ namespace { // Pointer to the directory underlying the mount point. File* root_; -File* FileInfoFile(fuse_file_info* const file_info) noexcept { - return reinterpret_cast(file_info->fh); -} - -Directory* FileInfoDirectory(fuse_file_info* const file_info) noexcept { - return reinterpret_cast(file_info->fh); -} - mode_t DirectoryTypeToFileType(const unsigned char type) noexcept { return static_cast(DTTOIF(type)); } @@ -109,6 +101,12 @@ int OpenResource(const char* const path, const int flags, const mode_t mode, } } +template +int ReleaseResource(const uint64_t handle) noexcept { + delete reinterpret_cast(handle); + return 0; +} + int Open(const char* const path, fuse_file_info* const file_info) noexcept { return OpenResource(path, file_info->flags, 0777, &file_info->fh); } @@ -133,8 +131,7 @@ int Create(const char* const path, const mode_t mode, } int Release(const char*, fuse_file_info* const file_info) noexcept { - delete FileInfoFile(file_info); - return 0; + return ReleaseResource(file_info->fh); } int Opendir(const char* const path, fuse_file_info* const file_info) noexcept { @@ -144,7 +141,7 @@ int Opendir(const char* const path, fuse_file_info* const file_info) noexcept { int Readdir(const char*, void* const buffer, fuse_fill_dir_t filler, const off_t offset, fuse_file_info* const file_info) noexcept { try { - Directory* const directory = FileInfoDirectory(file_info); + auto* const directory = reinterpret_cast(file_info->fh); static_assert(std::is_same(), "off_t is not convertible with long"); @@ -174,13 +171,7 @@ int Readdir(const char*, void* const buffer, fuse_fill_dir_t filler, } int Releasedir(const char*, fuse_file_info* const file_info) noexcept { - try { - delete FileInfoDirectory(file_info); - return 0; - } catch (...) { - LOG(ERROR) << "releasedir: caught unexpected value"; - return -ENOTRECOVERABLE; - } + return ReleaseResource(file_info->fh); } } // namespace -- cgit v1.2.3