diff --git a/services/applypatch/data_writer.cpp b/services/applypatch/data_writer.cpp index a42ac3df1b7e721d4df85c04f1bcaf86cd3f6fbf..3accdfdcc1d0a959b488e966c0ef2de56a6a849b 100644 --- a/services/applypatch/data_writer.cpp +++ b/services/applypatch/data_writer.cpp @@ -56,6 +56,12 @@ int DataWriter::OpenPath(const std::string &path) return fd; } +bool DataWriter::Sync(void) +{ + LOG(WARNING) << "sync unimplemented"; + return true; +} + std::unique_ptr DataWriter::CreateDataWriter(WriteMode mode, const std::string &path, uint64_t offset) { diff --git a/services/applypatch/raw_writer.cpp b/services/applypatch/raw_writer.cpp index 50bdfcc2269e1c522894a0b16bb6c5e21f8f126e..dae3d58975c2809ebfea80b611e8632efa6c44a7 100644 --- a/services/applypatch/raw_writer.cpp +++ b/services/applypatch/raw_writer.cpp @@ -77,4 +77,18 @@ int RawWriter::WriteInternal(int fd, const uint8_t *data, size_t len) offset_ += static_cast(len); return 0; } + +bool RawWriter::Sync(void) +{ + if (fd_ < 0) { + LOG(ERROR) << "invalid fd " << fd_; + return false; + } + if (fsync(fd_) != 0) { + LOG(ERROR) << "fsync failed, errno is " << errno; + return false; + } + LOG(INFO) << "fsync successfully " << fd_; + return true; +} } // namespace Updater diff --git a/services/applypatch/raw_writer.h b/services/applypatch/raw_writer.h index 2057225c90b8c22334c1b59c34f17900818f9eb3..f5d7a35029ad46d25baf26eea286d7d1f3023c90 100644 --- a/services/applypatch/raw_writer.h +++ b/services/applypatch/raw_writer.h @@ -26,7 +26,7 @@ namespace Updater { class RawWriter : public DataWriter { public: bool Write(const uint8_t *addr, size_t len, const void *context) override; - + bool Sync(void) override; RawWriter(const std::string path, uint64_t offset) : fd_(-1), path_(path), offset_(offset) {} RawWriter(const std::string path, uint64_t startAddr, uint64_t offset) : fd_(-1), path_(path), offset_(startAddr + offset) {} diff --git a/services/include/applypatch/data_writer.h b/services/include/applypatch/data_writer.h index 21503f41c505b6fbecaa0c8c105e65dceeebb5f7..9df5d81f660e1c51de013f71cc9349a1c9f82d77 100644 --- a/services/include/applypatch/data_writer.h +++ b/services/include/applypatch/data_writer.h @@ -35,6 +35,7 @@ public: using WriterConstructor = std::unique_ptr (*)(const std::string &, const std::string &, uint64_t, uint64_t); virtual bool Write(const uint8_t *addr, size_t len, const void *context) = 0; + virtual bool Sync(void); virtual ~DataWriter() {} static std::unique_ptr CreateDataWriter(WriteMode mode, const std::string &path, UpdaterEnv *env, uint64_t offset = 0);