summaryrefslogtreecommitdiffstats
path: root/libs/utils
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2010-08-11 14:15:20 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-08-11 14:15:20 -0700
commit1f5a8d96da2f0d095196113a2bfa901c18592206 (patch)
tree8a78eb80ac7100d044e269400ba6d9e622799cc5 /libs/utils
parentbf0cb26a1c6305f2a7795c2498591b6189cc5b79 (diff)
parent80328ba09606bd0825d7d4c9a4f213d1de09e53a (diff)
downloadframeworks_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.cpp42
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;
+}
+
}