diff options
author | Doug Zongker <dougz@android.com> | 2009-05-08 21:22:51 +0200 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-05-08 21:22:51 +0200 |
commit | 985d95f9f45baeb5f013fde9575acc8a81746bcb (patch) | |
tree | 5dbf0392571a64b4afbe0ba73655c889f650eb75 /minzip/Zip.c | |
parent | am 683c462: align data passed to write() on 32k boundaries (diff) | |
parent | undo temporary alignment hack (diff) | |
download | android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.tar android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.tar.gz android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.tar.bz2 android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.tar.lz android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.tar.xz android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.tar.zst android_bootable_recovery-985d95f9f45baeb5f013fde9575acc8a81746bcb.zip |
Diffstat (limited to 'minzip/Zip.c')
-rw-r--r-- | minzip/Zip.c | 46 |
1 files changed, 7 insertions, 39 deletions
diff --git a/minzip/Zip.c b/minzip/Zip.c index a601e7453..8cdb89874 100644 --- a/minzip/Zip.c +++ b/minzip/Zip.c @@ -12,7 +12,6 @@ #include <stdint.h> // for uintptr_t #include <stdlib.h> #include <sys/stat.h> // for S_ISLNK() -#include <sys/statfs.h> #include <unistd.h> #define LOG_TAG "minzip" @@ -85,12 +84,6 @@ enum { }; -/* The maximum zipped file write size we will align. */ -#define WRITE_SIZE 32768 -/* The boundary on which we will align it. */ -#define WRITE_ALIGNMENT 32768 - - /* * For debugging, dump the contents of a ZipEntry. */ @@ -779,36 +772,18 @@ bool mzReadZipEntry(const ZipArchive* pArchive, const ZipEntry* pEntry, static bool writeProcessFunction(const unsigned char *data, int dataLen, void *cookie) { - WriteInfo *wi = (WriteInfo*)cookie; - - if (dataLen <= WRITE_SIZE) { - memcpy(wi->aligned_buffer, data, dataLen); - data = wi->aligned_buffer; - } + int fd = (int)cookie; ssize_t soFar = 0; while (true) { - ssize_t n = write(wi->fd, data+soFar, dataLen-soFar); + ssize_t n = write(fd, data+soFar, dataLen-soFar); if (n <= 0) { LOGE("Error writing %ld bytes from zip file from %p: %s\n", dataLen-soFar, data+soFar, strerror(errno)); - if (errno == ENOSPC) { - struct statfs sf; - if (statfs("/system", &sf) != 0) { - LOGE("failed to statfs /system: %s\n", strerror(errno)); - } else { - LOGE("statfs said: %ld * %ld = %ld\n", - (long)sf.f_bsize, (long)sf.f_bfree, - (long)sf.f_bsize * (long)sf.f_bfree); - } + if (errno != EINTR) { + return false; } - return false; } else if (n > 0) { - if (n < dataLen-soFar) { - LOGE("short write: %d bytes of %d from %p\n", - (int)n, (int)(dataLen-soFar), - data+soFar); - } soFar += n; if (soFar == dataLen) return true; if (soFar > dataLen) { @@ -824,10 +799,10 @@ static bool writeProcessFunction(const unsigned char *data, int dataLen, * Uncompress "pEntry" in "pArchive" to "fd" at the current offset. */ bool mzExtractZipEntryToFile(const ZipArchive *pArchive, - const ZipEntry *pEntry, WriteInfo *wi) + const ZipEntry *pEntry, int fd) { bool ret = mzProcessZipEntryContents(pArchive, pEntry, writeProcessFunction, - wi); + (void*)fd); if (!ret) { LOGE("Can't extract entry to file.\n"); return false; @@ -929,11 +904,6 @@ bool mzExtractRecursive(const ZipArchive *pArchive, return false; } - unsigned char* buffer = malloc(WRITE_SIZE+WRITE_ALIGNMENT); - WriteInfo wi; - wi.aligned_buffer = buffer + WRITE_ALIGNMENT - - ((long)buffer % WRITE_ALIGNMENT); - unsigned int zipDirLen; char *zpath; @@ -1114,8 +1084,7 @@ bool mzExtractRecursive(const ZipArchive *pArchive, break; } - wi.fd = fd; - bool ok = mzExtractZipEntryToFile(pArchive, pEntry, &wi); + bool ok = mzExtractZipEntryToFile(pArchive, pEntry, fd); close(fd); if (!ok) { LOGE("Error extracting \"%s\"\n", targetFile); @@ -1138,7 +1107,6 @@ bool mzExtractRecursive(const ZipArchive *pArchive, free(helper.buf); free(zpath); - free(buffer); return ok; } |