From 97466cb1453585930d863cccdedf8acf57520edf Mon Sep 17 00:00:00 2001 From: Tommy Chiu Date: Tue, 26 Mar 2019 17:18:09 +0800 Subject: [PATCH] vold: Introduce android::vold::writeStringToFile Remove static definition of writeStringToFile, and move it from KeyStorage to Utils (cherry picked from commit 0bd2d116921ab46312cc4a37246a68d38447a72b) Bug: 71810347 Test: Build pass and reboot stress test. Change-Id: I38bfd27370ac2372e446dc699f518122e73c6877 Merged-In: I38bfd27370ac2372e446dc699f518122e73c6877 --- KeyStorage.cpp | 27 --------------------------- Utils.cpp | 28 ++++++++++++++++++++++++++++ Utils.h | 1 + 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/KeyStorage.cpp b/KeyStorage.cpp index 42890ca..d00225b 100644 --- a/KeyStorage.cpp +++ b/KeyStorage.cpp @@ -147,33 +147,6 @@ static bool readFileToString(const std::string& filename, std::string* result) { return true; } -static bool writeStringToFile(const std::string& payload, const std::string& filename) { - android::base::unique_fd fd(TEMP_FAILURE_RETRY( - open(filename.c_str(), O_WRONLY | O_CREAT | O_NOFOLLOW | O_TRUNC | O_CLOEXEC, 0666))); - if (fd == -1) { - PLOG(ERROR) << "Failed to open " << filename; - return false; - } - if (!android::base::WriteStringToFd(payload, fd)) { - PLOG(ERROR) << "Failed to write to " << filename; - unlink(filename.c_str()); - return false; - } - // fsync as close won't guarantee flush data - // see close(2), fsync(2) and b/68901441 - if (fsync(fd) == -1) { - if (errno == EROFS || errno == EINVAL) { - PLOG(WARNING) << "Skip fsync " << filename - << " on a file system does not support synchronization"; - } else { - PLOG(ERROR) << "Failed to fsync " << filename; - unlink(filename.c_str()); - return false; - } - } - return true; -} - static bool readRandomBytesOrLog(size_t count, std::string* out) { auto status = ReadRandomBytes(count, *out); if (status != OK) { diff --git a/Utils.cpp b/Utils.cpp index a8273d7..405c22e 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -840,5 +841,32 @@ bool FsyncDirectory(const std::string& dirname) { return true; } +bool writeStringToFile(const std::string& payload, const std::string& filename) { + android::base::unique_fd fd(TEMP_FAILURE_RETRY( + open(filename.c_str(), O_WRONLY | O_CREAT | O_NOFOLLOW | O_TRUNC | O_CLOEXEC, 0666))); + if (fd == -1) { + PLOG(ERROR) << "Failed to open " << filename; + return false; + } + if (!android::base::WriteStringToFd(payload, fd)) { + PLOG(ERROR) << "Failed to write to " << filename; + unlink(filename.c_str()); + return false; + } + // fsync as close won't guarantee flush data + // see close(2), fsync(2) and b/68901441 + if (fsync(fd) == -1) { + if (errno == EROFS || errno == EINVAL) { + PLOG(WARNING) << "Skip fsync " << filename + << " on a file system does not support synchronization"; + } else { + PLOG(ERROR) << "Failed to fsync " << filename; + unlink(filename.c_str()); + return false; + } + } + return true; +} + } // namespace vold } // namespace android diff --git a/Utils.h b/Utils.h index 48a57d9..c083021 100644 --- a/Utils.h +++ b/Utils.h @@ -134,6 +134,7 @@ status_t WaitForFile(const char* filename, std::chrono::nanoseconds timeout); bool FsyncDirectory(const std::string& dirname); +bool writeStringToFile(const std::string& payload, const std::string& filename); } // namespace vold } // namespace android