Index: modules/archive/src/main/java/java/util/zip/ZipFile.java =================================================================== --- modules/archive/src/main/java/java/util/zip/ZipFile.java (revision 599569) +++ modules/archive/src/main/java/java/util/zip/ZipFile.java (working copy) @@ -191,7 +191,7 @@ */ throw new IllegalStateException(); } - byte[] buf = inflateEntryImpl2(descriptor, entry.getName()); + byte[] buf = inflateEntryImpl2(descriptor, entry.getName(), entry.time, entry.size, entry.compressedSize, entry.crc, entry.compressionMethod, entry.modDate, entry.dataOffset); if (buf == null) { return null; } @@ -213,7 +213,7 @@ private native ZipEntry getEntryImpl(long descriptor1, String entryName); - private native byte[] inflateEntryImpl2(long descriptor1, String entryName) + private native byte[] inflateEntryImpl2(long descriptor1, String entryName, long time, long size, long compressedSize, long crc, long compressionMethod, long modDate, long dataOffset) throws ZipException; /** Index: modules/archive/src/main/native/archive/shared/zip.c =================================================================== --- modules/archive/src/main/native/archive/shared/zip.c (revision 599569) +++ modules/archive/src/main/native/archive/shared/zip.c (working copy) @@ -499,7 +499,8 @@ JNIEXPORT jbyteArray JNICALL Java_java_util_zip_ZipFile_inflateEntryImpl2 (JNIEnv * env, jobject recv, jlong descriptor, - jstring entryName) + jstring entryName, jlong lastModTime, jlong uncompressedSize, jlong compressedSize, +jlong crc32, jlong compressionMethod, jlong lastModDate, jlong dataPointer) { PORT_ACCESS_FROM_ENV (env); #ifdef HY_ZIP_API @@ -532,25 +533,34 @@ #else /* HY_ZIP_API */ zipFuncs->zip_initZipEntry (VMI, &zipEntry); #endif /* HY_ZIP_API */ - retval = -#ifndef HY_ZIP_API - zip_getZipEntry (privatePortLibrary, zipFile, &zipEntry, entryCopy, TRUE); -#else /* HY_ZIP_API */ - zipFuncs->zip_getZipEntry (VMI, zipFile, &zipEntry, entryCopy, TRUE); -#endif /* HY_ZIP_API */ +zipEntry.lastModTime = (U_16)lastModTime; +zipEntry.uncompressedSize = (U_32)uncompressedSize; +zipEntry.compressedSize = (U_32)compressedSize; +zipEntry.crc32 = (U_32)crc32; +zipEntry.compressionMethod = (U_16)compressionMethod; +zipEntry.lastModDate = (U_16)lastModDate; +zipEntry.dataPointer = (I_32)dataPointer; +zipEntry.filename = (U_8 *)entryCopy; + (*env)->ReleaseStringUTFChars (env, entryName, entryCopy); - if (retval) - { -#ifndef HY_ZIP_API - zip_freeZipEntry (privatePortLibrary, &zipEntry); -#else /* HY_ZIP_API */ - zipFuncs->zip_freeZipEntry (VMI, &zipEntry); -#endif /* HY_ZIP_API */ - if (retval == ZIP_ERR_OUT_OF_MEMORY) - throwNewOutOfMemoryError (env, ""); - return NULL; - } - buf = (*env)->NewByteArray (env, zipEntry.uncompressedSize); if (!buf) { Index: modules/luni/src/main/native/include/windows/jclprots.h =================================================================== --- modules/luni/src/main/native/include/windows/jclprots.h (revision 599569) +++ modules/luni/src/main/native/include/windows/jclprots.h (working copy) @@ -309,7 +309,7 @@ jstring entryName)); JNIEXPORT jbyteArray JNICALL Java_java_util_zip_ZipFile_inflateEntryImpl2 PROTOTYPE ((JNIEnv * env, jobject recv, jlong zipPointer, - jstring entryName)); + jstring entryName, jlong lastModTime, jlong uncompressedSize, jlong compressedSize, jlong crc32, jlong compressionMethod, jlong lastModDate, jlong dataPointer)); void throwNewIllegalArgumentException PROTOTYPE ((JNIEnv * env, const char *message));