Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5f0a105 authored by Daniel Zheng's avatar Daniel Zheng Committed by Gerrit Code Review
Browse files

Merge "Move ReadCowHeader to CowReader" into main

parents a3646037 76b1e83f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+29 −0
Original line number Diff line number Diff line
@@ -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_(),
+0 −29
Original line number Diff line number Diff line
@@ -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) {
+0 −2
Original line number Diff line number Diff line
@@ -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