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

Commit 03cacc4a authored by Daniel Zheng's avatar Daniel Zheng Committed by Automerger Merge Worker
Browse files

Merge "Move ReadCowHeader to CowReader" into main am: f5f0a105 am:...

Merge "Move ReadCowHeader to CowReader" into main am: f5f0a105 am: 2457e0b7 am: 9d67604c am: 4156b811 am: 9c6e53b3

Original change: https://android-review.googlesource.com/c/platform/system/core/+/2781728



Change-Id: I317229a4d5067a2223403c929a33570ff5200cb7
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 51c75a8a 9c6e53b3
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