From 6c008ff888c8c79c3322f8d06587407cf5a098b0 Mon Sep 17 00:00:00 2001 From: Dmitrii Merkurev Date: Fri, 2 Jun 2023 12:44:31 +0100 Subject: [PATCH] Avoid creating a storage folder for fastboot devices command Bug: 284267164 Bug: 284786311 Test: fastboot devices doesn't create a .fastboot folder Change-Id: I3e44c2a838e4287e6220c18f6e805cc71e0c9669 Signed-off-by: Dmitrii Merkurev --- fastboot/fastboot.cpp | 2 +- fastboot/filesystem.h | 1 + fastboot/storage.cpp | 22 ++++++++++------------ fastboot/storage.h | 4 +++- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/fastboot/fastboot.cpp b/fastboot/fastboot.cpp index bec4ef1e9..ee99c1788 100644 --- a/fastboot/fastboot.cpp +++ b/fastboot/fastboot.cpp @@ -396,7 +396,7 @@ static Transport* NetworkDeviceConnected(bool print = false) { ConnectedDevicesStorage storage; std::set devices; - { + if (storage.Exists()) { FileLock lock = storage.Lock(); devices = storage.ReadDevices(lock); } diff --git a/fastboot/filesystem.h b/fastboot/filesystem.h index 5f41fbc9f..c5f9c948d 100644 --- a/fastboot/filesystem.h +++ b/fastboot/filesystem.h @@ -31,6 +31,7 @@ const char kPathSeparator = #endif std::string GetHomeDirPath(); +bool FileExists(const std::string& path); bool EnsureDirectoryExists(const std::string& directory_path); class FileLock { diff --git a/fastboot/storage.cpp b/fastboot/storage.cpp index d6e00cffa..dc733b994 100644 --- a/fastboot/storage.cpp +++ b/fastboot/storage.cpp @@ -23,24 +23,19 @@ #include "util.h" ConnectedDevicesStorage::ConnectedDevicesStorage() { - const std::string home_path = GetHomeDirPath(); - if (home_path.empty()) { - return; - } - - const std::string home_fastboot_path = home_path + kPathSeparator + ".fastboot"; - - if (!EnsureDirectoryExists(home_fastboot_path)) { - LOG(FATAL) << "Cannot create directory: " << home_fastboot_path; - } + home_fastboot_path_ = GetHomeDirPath() + kPathSeparator + ".fastboot"; + devices_path_ = home_fastboot_path_ + kPathSeparator + "devices"; // We're using a separate file for locking because the Windows LockFileEx does not // permit opening a file stream for the locked file, even within the same process. So, // we have to use fd or handle API to manipulate the storage files, which makes it // nearly impossible to fully rewrite a file content without having to recreate it. // Unfortunately, this is not an option during holding a lock. - devices_path_ = home_fastboot_path + kPathSeparator + "devices"; - devices_lock_path_ = home_fastboot_path + kPathSeparator + "devices.lock"; + devices_lock_path_ = home_fastboot_path_ + kPathSeparator + "devices.lock"; +} + +bool ConnectedDevicesStorage::Exists() const { + return FileExists(devices_path_); } void ConnectedDevicesStorage::WriteDevices(const FileLock&, const std::set& devices) { @@ -63,5 +58,8 @@ void ConnectedDevicesStorage::Clear(const FileLock&) { } FileLock ConnectedDevicesStorage::Lock() const { + if (!EnsureDirectoryExists(home_fastboot_path_)) { + LOG(FATAL) << "Cannot create directory: " << home_fastboot_path_; + } return FileLock(devices_lock_path_); } \ No newline at end of file diff --git a/fastboot/storage.h b/fastboot/storage.h index 0cc3d86d6..ae9d846e6 100644 --- a/fastboot/storage.h +++ b/fastboot/storage.h @@ -24,13 +24,15 @@ class ConnectedDevicesStorage { public: ConnectedDevicesStorage(); + + bool Exists() const; void WriteDevices(const FileLock&, const std::set& devices); std::set ReadDevices(const FileLock&); void Clear(const FileLock&); - FileLock Lock() const; private: + std::string home_fastboot_path_; std::string devices_path_; std::string devices_lock_path_; }; \ No newline at end of file