Loading fs_mgr/libsnapshot/include/libsnapshot/cow_reader.h +2 −0 Original line number Diff line number Diff line Loading @@ -188,5 +188,7 @@ class CowReader final : public ICowReader { uint8_t compression_type_ = kCowCompressNone; }; bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header); } // namespace snapshot } // namespace android fs_mgr/libsnapshot/libsnapshot_cow/cow_reader.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,35 @@ namespace android { namespace snapshot { bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header) { if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } memset(header, 0, sizeof(*header)); if (!android::base::ReadFully(fd, &header->prefix, sizeof(header->prefix))) { return false; } if (header->prefix.magic != kCowMagicNumber) { LOG(ERROR) << "Header Magic corrupted. Magic: " << header->prefix.magic << "Expected: " << kCowMagicNumber; return false; } if (header->prefix.header_size > sizeof(CowHeader)) { LOG(ERROR) << "Unknown CowHeader size (got " << header->prefix.header_size << " bytes, expected at most " << sizeof(CowHeader) << " bytes)"; return false; } if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } return android::base::ReadFully(fd, header, header->prefix.header_size); } CowReader::CowReader(ReaderFlags reader_flag, bool is_merge) : fd_(-1), header_(), Loading fs_mgr/libsnapshot/libsnapshot_cow/parser_v2.cpp +0 −29 Original line number Diff line number Diff line Loading @@ -23,35 +23,6 @@ namespace snapshot { using android::base::borrowed_fd; bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header) { if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } memset(header, 0, sizeof(*header)); if (!android::base::ReadFully(fd, &header->prefix, sizeof(header->prefix))) { return false; } if (header->prefix.magic != kCowMagicNumber) { LOG(ERROR) << "Header Magic corrupted. Magic: " << header->prefix.magic << "Expected: " << kCowMagicNumber; return false; } if (header->prefix.header_size > sizeof(CowHeader)) { LOG(ERROR) << "Unknown CowHeader size (got " << header->prefix.header_size << " bytes, expected at most " << sizeof(CowHeader) << " bytes)"; return false; } if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } return android::base::ReadFully(fd, header, header->prefix.header_size); } bool CowParserV2::Parse(borrowed_fd fd, const CowHeader& header, std::optional<uint64_t> label) { auto pos = lseek(fd.get(), 0, SEEK_END); if (pos < 0) { Loading fs_mgr/libsnapshot/libsnapshot_cow/parser_v2.h +0 −2 Original line number Diff line number Diff line Loading @@ -49,7 +49,5 @@ class CowParserV2 { std::optional<uint64_t> last_label_; }; bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header); } // namespace snapshot } // namespace android Loading
fs_mgr/libsnapshot/include/libsnapshot/cow_reader.h +2 −0 Original line number Diff line number Diff line Loading @@ -188,5 +188,7 @@ class CowReader final : public ICowReader { uint8_t compression_type_ = kCowCompressNone; }; bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header); } // namespace snapshot } // namespace android
fs_mgr/libsnapshot/libsnapshot_cow/cow_reader.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,35 @@ namespace android { namespace snapshot { bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header) { if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } memset(header, 0, sizeof(*header)); if (!android::base::ReadFully(fd, &header->prefix, sizeof(header->prefix))) { return false; } if (header->prefix.magic != kCowMagicNumber) { LOG(ERROR) << "Header Magic corrupted. Magic: " << header->prefix.magic << "Expected: " << kCowMagicNumber; return false; } if (header->prefix.header_size > sizeof(CowHeader)) { LOG(ERROR) << "Unknown CowHeader size (got " << header->prefix.header_size << " bytes, expected at most " << sizeof(CowHeader) << " bytes)"; return false; } if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } return android::base::ReadFully(fd, header, header->prefix.header_size); } CowReader::CowReader(ReaderFlags reader_flag, bool is_merge) : fd_(-1), header_(), Loading
fs_mgr/libsnapshot/libsnapshot_cow/parser_v2.cpp +0 −29 Original line number Diff line number Diff line Loading @@ -23,35 +23,6 @@ namespace snapshot { using android::base::borrowed_fd; bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header) { if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } memset(header, 0, sizeof(*header)); if (!android::base::ReadFully(fd, &header->prefix, sizeof(header->prefix))) { return false; } if (header->prefix.magic != kCowMagicNumber) { LOG(ERROR) << "Header Magic corrupted. Magic: " << header->prefix.magic << "Expected: " << kCowMagicNumber; return false; } if (header->prefix.header_size > sizeof(CowHeader)) { LOG(ERROR) << "Unknown CowHeader size (got " << header->prefix.header_size << " bytes, expected at most " << sizeof(CowHeader) << " bytes)"; return false; } if (lseek(fd.get(), 0, SEEK_SET) < 0) { PLOG(ERROR) << "lseek header failed"; return false; } return android::base::ReadFully(fd, header, header->prefix.header_size); } bool CowParserV2::Parse(borrowed_fd fd, const CowHeader& header, std::optional<uint64_t> label) { auto pos = lseek(fd.get(), 0, SEEK_END); if (pos < 0) { Loading
fs_mgr/libsnapshot/libsnapshot_cow/parser_v2.h +0 −2 Original line number Diff line number Diff line Loading @@ -49,7 +49,5 @@ class CowParserV2 { std::optional<uint64_t> last_label_; }; bool ReadCowHeader(android::base::borrowed_fd fd, CowHeader* header); } // namespace snapshot } // namespace android