summaryrefslogtreecommitdiffstats
path: root/include/androidfw/ZipUtils.h
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2013-12-03 13:16:03 +0000
committerAdam Lesinski <adamlesinski@google.com>2014-01-27 10:31:11 -0800
commit560566d2915c03bed338fc532ac7f7aa3620cfdf (patch)
tree05c38c1fdcea2989eab2ff6e2934afa4f1f09326 /include/androidfw/ZipUtils.h
parente1aa223657dd1def8609b377afa86a024bfd4e14 (diff)
downloadframeworks_base-560566d2915c03bed338fc532ac7f7aa3620cfdf.zip
frameworks_base-560566d2915c03bed338fc532ac7f7aa3620cfdf.tar.gz
frameworks_base-560566d2915c03bed338fc532ac7f7aa3620cfdf.tar.bz2
Reimplement ZipFileRO in terms of libziparchive.
This lets us share zip archive processing code with both the runtime (Art, dalvik) and critical java code (StrictJarFile). This change also moves several utility methods to ZipUtils and dedups code across several zip inflation methods. One of the side effects of this change is that several processing loops are now O(n) instead of O(n^2). bug: 10193060 (cherry picked from commit afd31e08299008fdc5c2813f21b2573f29dc53df) Change-Id: Iae67e62f1dc6dfc3f43e29bc38e3ffd1cb14d191
Diffstat (limited to 'include/androidfw/ZipUtils.h')
-rw-r--r--include/androidfw/ZipUtils.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/include/androidfw/ZipUtils.h b/include/androidfw/ZipUtils.h
index 42c42b6..6bea25a 100644
--- a/include/androidfw/ZipUtils.h
+++ b/include/androidfw/ZipUtils.h
@@ -21,6 +21,7 @@
#define __LIBS_ZIPUTILS_H
#include <stdio.h>
+#include <time.h>
namespace android {
@@ -33,9 +34,11 @@ public:
* General utility function for uncompressing "deflate" data from a file
* to a buffer.
*/
+ static bool inflateToBuffer(FILE* fp, void* buf, long uncompressedLen,
+ long compressedLen);
static bool inflateToBuffer(int fd, void* buf, long uncompressedLen,
long compressedLen);
- static bool inflateToBuffer(FILE* fp, void* buf, long uncompressedLen,
+ static bool inflateToBuffer(void *in, void* buf, long uncompressedLen,
long compressedLen);
/*
@@ -57,6 +60,19 @@ public:
static bool examineGzip(FILE* fp, int* pCompressionMethod,
long* pUncompressedLen, long* pCompressedLen, unsigned long* pCRC32);
+ /*
+ * Utility function to convert ZIP's time format to a timespec struct.
+ */
+ static inline void zipTimeToTimespec(long when, struct tm* timespec) {
+ const long date = when >> 16;
+ timespec->tm_year = ((date >> 9) & 0x7F) + 80; // Zip is years since 1980
+ timespec->tm_mon = (date >> 5) & 0x0F;
+ timespec->tm_mday = date & 0x1F;
+
+ timespec->tm_hour = (when >> 11) & 0x1F;
+ timespec->tm_min = (when >> 5) & 0x3F;
+ timespec->tm_sec = (when & 0x1F) << 1;
+ }
private:
ZipUtils() {}
~ZipUtils() {}