diff options
| author | Kenny Root <kroot@google.com> | 2010-08-11 14:15:20 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-08-11 14:15:20 -0700 |
| commit | 1f5a8d96da2f0d095196113a2bfa901c18592206 (patch) | |
| tree | 8a78eb80ac7100d044e269400ba6d9e622799cc5 /libs/utils | |
| parent | bf0cb26a1c6305f2a7795c2498591b6189cc5b79 (diff) | |
| parent | 80328ba09606bd0825d7d4c9a4f213d1de09e53a (diff) | |
| download | frameworks_base-1f5a8d96da2f0d095196113a2bfa901c18592206.zip frameworks_base-1f5a8d96da2f0d095196113a2bfa901c18592206.tar.gz frameworks_base-1f5a8d96da2f0d095196113a2bfa901c18592206.tar.bz2 | |
am 80328ba0: am 8ea71511: Merge "Initial tool for OBB manipulation" into gingerbread
Merge commit '80328ba09606bd0825d7d4c9a4f213d1de09e53a'
* commit '80328ba09606bd0825d7d4c9a4f213d1de09e53a':
Initial tool for OBB manipulation
Diffstat (limited to 'libs/utils')
| -rw-r--r-- | libs/utils/ObbFile.cpp | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/libs/utils/ObbFile.cpp b/libs/utils/ObbFile.cpp index fe49300..adedf0c 100644 --- a/libs/utils/ObbFile.cpp +++ b/libs/utils/ObbFile.cpp @@ -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; +} + } |
