151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Native method support for java.util.zip.ZipFile 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <stdio.h> 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <stdlib.h> 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <string.h> 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <errno.h> 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <ctype.h> 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <assert.h> 36a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski#include "JNIHelp.h" 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jlong.h" 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jvm.h" 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jni.h" 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jni_util.h" 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "zip_util.h" 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#ifdef WIN32 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "io_util_md.h" 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#else 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "io_util.h" 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#endif 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "java_util_zip_ZipFile.h" 49a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski 50a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski#define NATIVE_METHOD(className, functionName, signature) \ 51a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski{ #functionName, signature, (void*)(className ## _ ## functionName) } 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define DEFLATED 8 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define STORED 0 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskistatic jfieldID jzfileID; 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 58d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniakstatic void ZipFile_initIDs(JNIEnv *env) 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 60d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniak jclass cls = (*env)->FindClass(env, "java/util/zip/ZipFile"); 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfileID = (*env)->GetFieldID(env, cls, "jzfile", "J"); 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski assert(jzfileID != 0); 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 65d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniak 66d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniakstatic int OPEN_READ = java_util_zip_ZipFile_OPEN_READ; 67d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniakstatic int OPEN_DELETE = java_util_zip_ZipFile_OPEN_DELETE; 68d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniak 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskistatic void 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiThrowZipException(JNIEnv *env, const char *msg) 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jstring s = NULL; 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jobject x; 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (msg != NULL) { 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski s = JNU_NewStringPlatform(env, msg); 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski x = JNU_NewObjectByName(env, 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "java/util/zip/ZipException", 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski "(Ljava/lang/String;)V", s); 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (x != NULL) { 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->Throw(env, x); 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 87a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_open(JNIEnv *env, jclass cls, jstring name, 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jint mode, jlong lastModified, 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jboolean usemmap) 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski const char *path = JNU_GetStringPlatformChars(env, name, 0); 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski char *msg = 0; 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jlong result = 0; 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int flag = 0; 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = 0; 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (mode & OPEN_READ) flag |= O_RDONLY; 98a128ef7c6913e8b5f2ef4678ade5f97d7f7f452fPrzemyslaw Szczepaniak // Android changed, JVM_O_DELETE/unlink is problematic, see b/28901232. 99a128ef7c6913e8b5f2ef4678ade5f97d7f7f452fPrzemyslaw Szczepaniak //if (mode & OPEN_DELETE) flag |= JVM_O_DELETE; 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (path != 0) { 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski zip = ZIP_Get_From_Cache(path, &msg, lastModified); 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (zip == 0 && msg == 0) { 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ZFILE zfd = 0; 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#ifdef WIN32 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski zfd = winFileHandleOpen(env, name, flag); 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (zfd == -1) { 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* Exception already pending. */ 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski goto finally; 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#else 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski zfd = JVM_Open(path, flag, 0); 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (zfd < 0) { 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throwFileNotFoundException(env, name); 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski goto finally; 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#endif 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski zip = ZIP_Put_In_Cache0(path, zfd, &msg, lastModified, usemmap); 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (zip != 0) { 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski result = ptr_to_jlong(zip); 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (msg != 0) { 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ThrowZipException(env, msg); 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski free(msg); 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else if (errno == ENOMEM) { 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski JNU_ThrowOutOfMemoryError(env, 0); 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ThrowZipException(env, "error in opening zip file"); 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskifinally: 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski JNU_ReleaseStringPlatformChars(env, name, path); 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return result; 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 138a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getTotal(JNIEnv *env, jclass cls, jlong zfile) 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return zip->total; 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jboolean JNICALL 146a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_startsWithLOC(JNIEnv *env, jclass cls, jlong zfile) 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return zip->locsig; 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT void JNICALL 154a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_close(JNIEnv *env, jclass cls, jlong zfile) 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ZIP_Close(jlong_to_ptr(zfile)); 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 1590393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan KamathJNIEXPORT jint JNICALL 1600393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan KamathZipFile_getFileDescriptor(JNIEnv *env, jclass cls, jlong zfile) { 1610393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan Kamath jzfile *zip = jlong_to_ptr(zfile); 1620393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan Kamath return zip->zfd; 1630393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan Kamath} 1640393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan Kamath 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 166a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntry(JNIEnv *env, jclass cls, jlong zfile, 167a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski jbyteArray name, jboolean addSlash) 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define MAXNAME 1024 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jsize ulen = (*env)->GetArrayLength(env, name); 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski char buf[MAXNAME+2], *path; 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze; 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (ulen > MAXNAME) { 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski path = malloc(ulen + 2); 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (path == 0) { 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski JNU_ThrowOutOfMemoryError(env, 0); 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return 0; 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski path = buf; 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->GetByteArrayRegion(env, name, 0, ulen, (jbyte *)path); 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski path[ulen] = '\0'; 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (addSlash == JNI_FALSE) { 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ze = ZIP_GetEntry(zip, path, 0); 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ze = ZIP_GetEntry(zip, path, (jint)ulen); 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (path != buf) { 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski free(path); 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ptr_to_jlong(ze); 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT void JNICALL 198a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_freeEntry(JNIEnv *env, jclass cls, jlong zfile, 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jlong zentry) 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ZIP_FreeEntry(zip, ze); 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 207a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getNextEntry(JNIEnv *env, jclass cls, jlong zfile, 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jint n) 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = ZIP_GetNextEntry(jlong_to_ptr(zfile), n); 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ptr_to_jlong(ze); 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 215a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntryMethod(JNIEnv *env, jclass cls, jlong zentry) 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ze->csize != 0 ? DEFLATED : STORED; 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 222a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntryFlag(JNIEnv *env, jclass cls, jlong zentry) 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ze->flag; 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 229a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntryCSize(JNIEnv *env, jclass cls, jlong zentry) 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ze->csize != 0 ? ze->csize : ze->size; 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 236a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntrySize(JNIEnv *env, jclass cls, jlong zentry) 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return ze->size; 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 243a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntryTime(JNIEnv *env, jclass cls, jlong zentry) 24451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 24551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 24651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return (jlong)ze->time & 0xffffffffUL; 24751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 24851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 24951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jlong JNICALL 250a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntryCrc(JNIEnv *env, jclass cls, jlong zentry) 25151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 25251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 25351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return (jlong)ze->crc & 0xffffffffUL; 25451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 25551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 25651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jbyteArray JNICALL 257a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getCommentBytes(JNIEnv *env, jclass cls, jlong zfile) 25851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 25951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 26051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jbyteArray jba = NULL; 26151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 26251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (zip->comment != NULL) { 26351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if ((jba = (*env)->NewByteArray(env, zip->clen)) == NULL) 26451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return NULL; 26551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->SetByteArrayRegion(env, jba, 0, zip->clen, (jbyte*)zip->comment); 26651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 26751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return jba; 26851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 26951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 27051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jbyteArray JNICALL 271a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getEntryBytes(JNIEnv *env, jclass cls, jlong zentry, jint type) 27251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 27351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzentry *ze = jlong_to_ptr(zentry); 27451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski int len = 0; 27551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jbyteArray jba = NULL; 27651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski switch (type) { 27751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski case java_util_zip_ZipFile_JZENTRY_NAME: 27851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (ze->name != 0) { 27951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski len = (int)strlen(ze->name); 28051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (len == 0 || (jba = (*env)->NewByteArray(env, len)) == NULL) 28151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 28251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->SetByteArrayRegion(env, jba, 0, len, (jbyte *)ze->name); 28351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 28451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 28551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski case java_util_zip_ZipFile_JZENTRY_EXTRA: 28651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (ze->extra != 0) { 28751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski unsigned char *bp = (unsigned char *)&ze->extra[0]; 28851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski len = (bp[0] | (bp[1] << 8)); 28951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (len <= 0 || (jba = (*env)->NewByteArray(env, len)) == NULL) 29051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 29151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->SetByteArrayRegion(env, jba, 0, len, &ze->extra[2]); 29251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 29351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 29451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski case java_util_zip_ZipFile_JZENTRY_COMMENT: 29551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (ze->comment != 0) { 29651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski len = (int)strlen(ze->comment); 29751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (len == 0 || (jba = (*env)->NewByteArray(env, len)) == NULL) 29851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 29951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->SetByteArrayRegion(env, jba, 0, len, (jbyte*)ze->comment); 30051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski break; 30251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 30351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return jba; 30451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 30551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 30651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 307a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_read(JNIEnv *env, jclass cls, jlong zfile, 308a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski jlong zentry, jlong pos, jbyteArray bytes, 309a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski jint off, jint len) 31051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 31151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 31251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski char *msg; 31351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 31451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#define BUFSIZE 8192 31551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /* copy via tmp stack buffer: */ 31651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jbyte buf[BUFSIZE]; 31751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 31851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (len > BUFSIZE) { 31951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski len = BUFSIZE; 32051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 32251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ZIP_Lock(zip); 32351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski len = ZIP_Read(zip, jlong_to_ptr(zentry), pos, buf, len); 32451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski msg = zip->msg; 32551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ZIP_Unlock(zip); 32651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (len != -1) { 32751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->SetByteArrayRegion(env, bytes, off, len, buf); 32851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 32951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 33051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (len == -1) { 33151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (msg != 0) { 33251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski ThrowZipException(env, msg); 33351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } else { 33451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski char errmsg[128]; 3356786911a58e65bad88d08a0d1f8d32ab067edaa9George Burgess IV snprintf(errmsg, sizeof(errmsg), "errno: %d, error: %s\n", errno, 3366786911a58e65bad88d08a0d1f8d32ab067edaa9George Burgess IV "Error reading ZIP file"); 33751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski JNU_ThrowIOExceptionWithLastError(env, errmsg); 33851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 33951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 34051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return len; 34251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 34351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 34451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jstring JNICALL 345a8ed084745590c5e4a0e8559b5821809d60fe242Piotr JastrzebskiZipFile_getZipMessage(JNIEnv *env, jclass cls, jlong zfile) 34651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 34751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jzfile *zip = jlong_to_ptr(zfile); 34851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski char *msg = zip->msg; 34951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (msg == NULL) { 35051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return NULL; 35151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 35251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return JNU_NewStringPlatform(env, msg); 35351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 354a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski 355ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan KamathJNIEXPORT jobjectArray JNICALL 356ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan KamathJarFile_getMetaInfEntryNames(JNIEnv *env, jobject obj) 357ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath{ 358ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath jlong zfile = (*env)->GetLongField(env, obj, jzfileID); 359ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath jzfile *zip; 360ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath int i, count; 361ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath jobjectArray result = 0; 362ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath 363ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath if (zfile == 0) { 364ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath JNU_ThrowByName(env, 365ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath "java/lang/IllegalStateException", "zip file closed"); 366ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath return NULL; 367ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 368ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath zip = jlong_to_ptr(zfile); 369ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath 370ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath /* count the number of valid ZIP metanames */ 371ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath count = 0; 372ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath if (zip->metanames != 0) { 373ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath for (i = 0; i < zip->metacount; i++) { 374ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath if (zip->metanames[i] != 0) { 375ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath count++; 376ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 377ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 378ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 379ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath 380ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath /* If some names were found then build array of java strings */ 381ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath if (count > 0) { 382ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath jclass cls = (*env)->FindClass(env, "java/lang/String"); 383ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath result = (*env)->NewObjectArray(env, count, cls, 0); 384ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath if (result != 0) { 385ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath for (i = 0; i < count; i++) { 386ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath jstring str = (*env)->NewStringUTF(env, zip->metanames[i]); 387ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath if (str == 0) { 388ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath break; 389ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 390ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath (*env)->SetObjectArrayElement(env, result, i, str); 391ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath (*env)->DeleteLocalRef(env, str); 392ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 393ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 394ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath } 395ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath return result; 396ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath} 397ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath 398a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebskistatic JNINativeMethod gMethods[] = { 3990393d3c84ed9bd24bcf0dac3782a1cc23400ace8Narayan Kamath NATIVE_METHOD(ZipFile, getFileDescriptor, "(J)I"), 400a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntry, "(J[BZ)J"), 401a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, freeEntry, "(JJ)V"), 402a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getNextEntry, "(JI)J"), 403a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, close, "(J)V"), 404a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, open, "(Ljava/lang/String;IJZ)J"), 405a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getTotal, "(J)I"), 406a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, startsWithLOC, "(J)Z"), 407a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, read, "(JJJ[BII)I"), 408a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntryTime, "(J)J"), 409a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntryCrc, "(J)J"), 410a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntryCSize, "(J)J"), 411a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntrySize, "(J)J"), 412a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntryMethod, "(J)I"), 413a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntryFlag, "(J)I"), 414a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getCommentBytes, "(J)[B"), 415a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getEntryBytes, "(JI)[B"), 416a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski NATIVE_METHOD(ZipFile, getZipMessage, "(J)Ljava/lang/String;"), 417a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski}; 418a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski 419ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamathstatic JNINativeMethod gJarFileMethods[] = { 420ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath NATIVE_METHOD(JarFile, getMetaInfEntryNames, "()[Ljava/lang/String;"), 421ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath}; 422ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath 423a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebskivoid register_java_util_zip_ZipFile(JNIEnv* env) { 424a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski jniRegisterNativeMethods(env, "java/util/zip/ZipFile", gMethods, NELEM(gMethods)); 425d66fb8e8bb26b1d294a7c42d740acaf427a3a0a3Przemyslaw Szczepaniak ZipFile_initIDs(env); 426ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath 427ff96d13467fa65856c19aaf06b151ce60e0edd8fNarayan Kamath jniRegisterNativeMethods(env, "java/util/jar/JarFile", gJarFileMethods, NELEM(gJarFileMethods)); 428a8ed084745590c5e4a0e8559b5821809d60fe242Piotr Jastrzebski} 429