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

Commit 8264321e authored by Kenny Root's avatar Kenny Root Committed by Android Git Automerger
Browse files

am 80328ba0: am 8ea71511: Merge "Initial tool for OBB manipulation" into gingerbread

Merge commit '80328ba09606bd0825d7d4c9a4f213d1de09e53a'

* commit '80328ba09606bd0825d7d4c9a4f213d1de09e53a':
  Initial tool for OBB manipulation
parents cd8fce00 e827d9f4
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ public:
    bool readFrom(int fd);
    bool writeTo(const char* filename);
    bool writeTo(int fd);
    bool removeFrom(const char* filename);
    bool removeFrom(int fd);

    const char* getFileName() const {
        return mFileName;
@@ -78,6 +80,8 @@ private:

    size_t mFileSize;

    size_t mFooterStart;

    unsigned char* mReadBuf;

    bool parseObbFile(int fd);
+39 −3
Original line number Diff line number Diff line
@@ -156,9 +156,9 @@ bool ObbFile::parseObbFile(int fd)
            return false;
        }

        if (footerSize < kFooterMinSize) {
            LOGW("claimed footer size is too small (%08zx; minimum size is 0x%x)\n",
                    footerSize, kFooterMinSize);
        if (footerSize < (kFooterMinSize - kFooterTagSize)) {
            LOGW("claimed footer size is too small (0x%zx; minimum size is 0x%x)\n",
                    footerSize, kFooterMinSize - kFooterTagSize);
            return false;
        }
    }
@@ -169,6 +169,8 @@ bool ObbFile::parseObbFile(int fd)
        return false;
    }

    mFooterStart = fileOffset;

    char* scanBuf = (char*)malloc(footerSize);
    if (scanBuf == NULL) {
        LOGW("couldn't allocate scanBuf: %s\n", strerror(errno));
@@ -293,4 +295,38 @@ bool ObbFile::writeTo(int fd)
    return true;
}

bool ObbFile::removeFrom(const char* filename)
{
    int fd;
    bool success = false;

    fd = ::open(filename, O_RDWR);
    if (fd < 0) {
        goto out;
    }
    success = removeFrom(fd);
    close(fd);

out:
    if (!success) {
        LOGW("failed to remove signature from %s: %s\n", filename, strerror(errno));
    }
    return success;
}

bool ObbFile::removeFrom(int fd)
{
    if (fd < 0) {
        return false;
    }

    if (!readFrom(fd)) {
        return false;
    }

    ftruncate(fd, mFooterStart);

    return true;
}

}