refactor
This commit is contained in:
		| @@ -54,6 +54,9 @@ protected: | ||||
|   bool atime_enabled_{true}; | ||||
|   bool console_enabled_{true}; | ||||
|   bool foreground_{false}; | ||||
| #if defined(__APPLE__) | ||||
|   std::string label_; | ||||
| #endif // defined(__APPLE__) | ||||
|   std::optional<gid_t> forced_gid_; | ||||
|   std::optional<uid_t> forced_uid_; | ||||
|   std::optional<mode_t> forced_umask_; | ||||
| @@ -608,7 +611,7 @@ public: | ||||
|  | ||||
|   static void display_version_information(std::vector<const char *> args); | ||||
|  | ||||
|   static auto unmount(const std::string &mount_location) -> int; | ||||
|   auto unmount(const std::string &mount_location) -> int; | ||||
|  | ||||
|   [[nodiscard]] auto get_mount_location() const -> std::string { | ||||
|     return mount_location_; | ||||
|   | ||||
| @@ -433,6 +433,8 @@ auto fuse_base::mount([[maybe_unused]] std::vector<std::string> orig_args, | ||||
|   } | ||||
|  | ||||
| #if defined(__APPLE__) | ||||
|   label_ = std::format("com.fifthgrid.blockstorage.repertory.{}.{}", | ||||
|                        provider_type_to_string(prov), unique_id); | ||||
|   if (not foreground_) { | ||||
|     if (not utils::file::change_to_process_directory()) { | ||||
|       std::cerr << "Failed to change to process directory" << std::endl; | ||||
| @@ -442,16 +444,14 @@ auto fuse_base::mount([[maybe_unused]] std::vector<std::string> orig_args, | ||||
|     orig_args[0U] = utils::path::combine(".", {"repertory"}); | ||||
|     orig_args.insert(std::next(orig_args.begin()), "-f"); | ||||
|  | ||||
|     auto label = std::format("com.fifthgrid.blockstorage.repertory.{}.{}", | ||||
|                              provider_type_to_string(prov), unique_id); | ||||
|     if (not utils::generate_launchd_plist( | ||||
|             label, utils::path::combine("~", {"/Library/LaunchAgents"}), | ||||
|             label_, utils::path::combine("~", {"/Library/LaunchAgents"}), | ||||
|             orig_args, utils::path::absolute("."), | ||||
|             fmt::format("/tmp/repertory_{}_{}.out", | ||||
|                         provider_type_to_string(prov), unique_id), | ||||
|             fmt::format("/tmp/repertory_{}_{}.err", | ||||
|                         provider_type_to_string(prov), unique_id))) { | ||||
|       std::cerr << fmt::format("Failed to generate plist|{}", label) | ||||
|       std::cerr << fmt::format("Failed to generate plist|{}", label_) | ||||
|                 << std::endl; | ||||
|       return -1; | ||||
|     } | ||||
| @@ -461,7 +461,7 @@ auto fuse_base::mount([[maybe_unused]] std::vector<std::string> orig_args, | ||||
|                        utils::path::combine("~", | ||||
|                                             { | ||||
|                                                 "/Library/LaunchAgents", | ||||
|                                                 fmt::format("{}.plist", label), | ||||
|                                                 fmt::format("{}.plist", label_), | ||||
|                                             })) | ||||
|                .c_str()); | ||||
|  | ||||
| @@ -470,14 +470,14 @@ auto fuse_base::mount([[maybe_unused]] std::vector<std::string> orig_args, | ||||
|                        utils::path::combine("~", | ||||
|                                             { | ||||
|                                                 "/Library/LaunchAgents", | ||||
|                                                 fmt::format("{}.plist", label), | ||||
|                                                 fmt::format("{}.plist", label_), | ||||
|                                             })) | ||||
|                .c_str()); | ||||
|  | ||||
|     ret = system( | ||||
|         fmt::format("launchctl kickstart gui/{}/{}", getuid(), label).c_str()); | ||||
|         fmt::format("launchctl kickstart gui/{}/{}", getuid(), label_).c_str()); | ||||
|     if (ret != 0) { | ||||
|       std::cerr << fmt::format("Failed to kickstart {}/{}", getuid(), label) | ||||
|       std::cerr << fmt::format("Failed to kickstart {}/{}", getuid(), label_) | ||||
|                 << std::endl; | ||||
|     } | ||||
|  | ||||
| @@ -920,6 +920,19 @@ auto fuse_base::unlink_(const char *path) -> int { | ||||
|  | ||||
| auto fuse_base::unmount(const std::string &mount_location) -> int { | ||||
| #if defined(__APPLE__) | ||||
|   if (utils::file::file{ | ||||
|           utils::path::combine("~", {"/Library/LaunchAgents", label_})} | ||||
|           .exists()) { | ||||
|     return system( | ||||
|         fmt::format("launchctl bootout gui/{} '{}' 1>/dev/null 2>&1", getuid(), | ||||
|                     utils::path::combine("~", | ||||
|                                          { | ||||
|                                              "/Library/LaunchAgents", | ||||
|                                              fmt::format("{}.plist", label_), | ||||
|                                          })) | ||||
|             .c_str()); | ||||
|   } | ||||
|  | ||||
|   auto cmd = "umount \"" + mount_location + "\" >/dev/null 2>&1"; | ||||
| #else // !defined(__APPLE__) | ||||
| #if FUSE_USE_VERSION >= 30 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user