JNIEXPORT jlong JNICALL Java_java_util_zip_ZipFile_00024ZFEnum_resetZip (JNIEnv * env, jobject recv, jlong descriptor) { PORT_ACCESS_FROM_ENV (env); IDATA nextEntryPointer; JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) descriptor; if (jclZipFile == (void *) -1) { throwNewIllegalStateException (env, ""); return 0; } zip_resetZipFile (privatePortLibrary, &(jclZipFile->hyZipFile), &nextEntryPointer); return nextEntryPointer; }
JNIEXPORT void JNICALL Java_java_util_zip_Deflater_setLevelsImpl (JNIEnv * env, jobject recv, int level, int strategy, jlong handle) { JCLZipStream *stream; jbyte b = 0; int err = 0; if (handle == -1) { throwNewIllegalStateException (env, ""); return; } stream = (JCLZipStream *) ((IDATA) handle); stream->stream->next_out = (Bytef *) & b; err = deflateParams (stream->stream, level, strategy); if (err != Z_OK) { THROW_ZIP_EXCEPTION(env, err, IllegalStateException); } }
JNIEXPORT jbyteArray JNICALL Java_java_util_zip_ZipFile_inflateEntryImpl2 (JNIEnv * env, jobject recv, jlong descriptor, jstring entryName) { PORT_ACCESS_FROM_ENV (env); I_32 retval; HyZipFile *zipFile; HyZipEntry zipEntry; const char *entryCopy; jbyteArray buf; JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) descriptor; /* Build the zipFile */ if (jclZipFile == (void *) -1) { throwNewIllegalStateException (env, ""); return NULL; } zipFile = &(jclZipFile->hyZipFile); entryCopy = (*env)->GetStringUTFChars (env, entryName, NULL); if (entryCopy == NULL) return NULL; zip_initZipEntry (privatePortLibrary, &zipEntry); retval = zip_getZipEntry (privatePortLibrary, zipFile, &zipEntry, entryCopy, TRUE); (*env)->ReleaseStringUTFChars (env, entryName, entryCopy); if (retval) { zip_freeZipEntry (privatePortLibrary, &zipEntry); if (retval == ZIP_ERR_OUT_OF_MEMORY) throwNewOutOfMemoryError (env, ""); return NULL; } buf = (*env)->NewByteArray (env, zipEntry.uncompressedSize); if (!buf) { throwNewOutOfMemoryError (env, ""); return NULL; } retval = zip_getZipEntryData (privatePortLibrary, zipFile, &zipEntry, NULL, zipEntry.uncompressedSize); if (retval == 0) (*env)->SetByteArrayRegion (env, buf, 0, zipEntry.uncompressedSize, zipEntry.data); zip_freeZipEntry (privatePortLibrary, &zipEntry); if (!retval) return buf; if (retval == ZIP_ERR_OUT_OF_MEMORY) throwNewOutOfMemoryError (env, ""); else throwJavaZIOException (env, ""); return NULL; }
JNIEXPORT jobject JNICALL Java_java_util_zip_ZipFile_00024ZFEnum_getNextEntry (JNIEnv * env, jobject recv, jlong descriptor, jlong nextEntry) { PORT_ACCESS_FROM_ENV (env); I_32 retval; HyZipFile *zipFile; HyZipEntry zipEntry; jobject java_ZipEntry, extra; jclass javaClass; jmethodID mid; jstring entryName = NULL; IDATA nextEntryPointer; JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) descriptor; if (jclZipFile == (void *) -1) { throwNewIllegalStateException (env, ""); return NULL; } zipFile = &(jclZipFile->hyZipFile); zip_initZipEntry (PORTLIB, &zipEntry); nextEntryPointer = (IDATA) nextEntry; retval = zip_getNextZipEntry (PORTLIB, zipFile, &zipEntry, &nextEntryPointer); if (retval) { if (retval != ZIP_ERR_NO_MORE_ENTRIES) { char buf[40]; sprintf (buf, "Error %d getting next zip entry", retval); throwNewInternalError (env, buf); } return (jobject) NULL; } /* Build a new ZipEntry from the C struct */ entryName = ((*env)->NewStringUTF (env, zipEntry.filename)); if (((*env)->ExceptionCheck (env))) return NULL; extra = NULL; if (zipEntry.extraFieldLength > 0) { zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL, zipEntry.extraFieldLength); extra = ((*env)->NewByteArray (env, zipEntry.extraFieldLength)); if (((*env)->ExceptionCheck (env))) { /* free the extraField entry */ zip_freeZipEntry (PORTLIB, &zipEntry); return NULL; } ((*env)-> SetByteArrayRegion (env, extra, 0, zipEntry.extraFieldLength, zipEntry.extraField)); jclmem_free_memory (env, zipEntry.extraField); zipEntry.extraField = NULL; } javaClass = JCL_CACHE_GET (env, CLS_java_util_zip_ZipEntry); javaClass = (*env)->NewLocalRef(env, javaClass); if (javaClass == NULL) { return NULL; } mid = JCL_CACHE_GET (env, MID_java_util_zip_ZipEntry_init); java_ZipEntry = ((*env)->NewObject (env, javaClass, mid, entryName, NULL, /* comment */ extra, (jlong) zipEntry.lastModTime, (jlong) zipEntry.uncompressedSize, (jlong) zipEntry.compressedSize, (jlong) zipEntry.crc32, zipEntry.compressionMethod, (jlong) zipEntry.lastModDate, (jlong) zipEntry.dataPointer)); zip_freeZipEntry (PORTLIB, &zipEntry); (*env)->SetLongField (env, recv, JCL_CACHE_GET (env, FID_java_util_zip_ZipFile_nextEntryPointer), nextEntryPointer); return java_ZipEntry; }
JNIEXPORT jobject JNICALL Java_java_util_zip_ZipFile_getEntryImpl (JNIEnv * env, jobject recv, jlong zipPointer, jstring entryName) { PORT_ACCESS_FROM_ENV (env); I_32 retval; HyZipFile *zipFile; HyZipEntry zipEntry; jobject java_ZipEntry, extra; jclass entryClass; jmethodID mid; const char *entryCopy; JCLZipFile *jclZipFile = (JCLZipFile *) (IDATA) zipPointer; if (jclZipFile == (void *) -1) { throwNewIllegalStateException (env, ""); return NULL; } zipFile = &(jclZipFile->hyZipFile); entryCopy = (*env)->GetStringUTFChars (env, entryName, NULL); if (entryCopy == NULL) return (jobject) NULL; zip_initZipEntry (PORTLIB, &zipEntry); retval = zip_getZipEntry (PORTLIB, zipFile, &zipEntry, entryCopy, TRUE); (*env)->ReleaseStringUTFChars (env, entryName, entryCopy); if (retval) { zip_freeZipEntry (PORTLIB, &zipEntry); return (jobject) NULL; } extra = NULL; if (zipEntry.extraFieldLength > 0) { zip_getZipEntryExtraField (PORTLIB, zipFile, &zipEntry, NULL, zipEntry.extraFieldLength); if (zipEntry.extraField == NULL) { zip_freeZipEntry (PORTLIB, &zipEntry); return (jobject) NULL; } extra = ((*env)->NewByteArray (env, zipEntry.extraFieldLength)); if (((*env)->ExceptionCheck (env))) { zip_freeZipEntry (PORTLIB, &zipEntry); return (jobject) NULL; } ((*env)-> SetByteArrayRegion (env, extra, 0, zipEntry.extraFieldLength, zipEntry.extraField)); } entryClass = JCL_CACHE_GET (env, CLS_java_util_zip_ZipEntry); entryClass = (*env)->NewLocalRef(env, entryClass); if (entryClass == NULL) { zip_freeZipEntry (PORTLIB, &zipEntry); return (jobject) NULL; } mid = JCL_CACHE_GET (env, MID_java_util_zip_ZipEntry_init); /* Build a new ZipEntry from the C struct */ java_ZipEntry = ((*env)->NewObject (env, entryClass, mid, entryName, NULL, extra, (jlong) zipEntry.lastModTime, (jlong) zipEntry.uncompressedSize, (jlong) zipEntry.compressedSize, (jlong) zipEntry.crc32, zipEntry.compressionMethod, (jlong) zipEntry.lastModDate, (jlong) zipEntry.dataPointer)); zip_freeZipEntry (PORTLIB, &zipEntry); return java_ZipEntry; }