151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 26c877179523385568cb4752a5825bf76f46769e2Przemyslaw Szczepaniak * Copyright (c) 1997, 2012, 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.Adler32 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 303ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak#include "JNIHelp.h" 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jni.h" 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include "jni_util.h" 336c877179523385568cb4752a5825bf76f46769e2Przemyslaw Szczepaniak#include "jlong.h" 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski#include <zlib.h> 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 373ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak 383ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak#define NATIVE_METHOD(className, functionName, signature) \ 393ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak{ #functionName, signature, (void*)(Java_java_util_zip_ ## className ## _ ## functionName) } 403ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJava_java_util_zip_Adler32_update(JNIEnv *env, jclass cls, jint adler, jint b) 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Bytef buf[1]; 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski buf[0] = (Bytef)b; 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return adler32(adler, buf, 1); 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJava_java_util_zip_Adler32_updateBytes(JNIEnv *env, jclass cls, jint adler, 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jarray b, jint off, jint len) 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Bytef *buf = (*env)->GetPrimitiveArrayCritical(env, b, 0); 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (buf) { 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski adler = adler32(adler, buf + off, len); 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski (*env)->ReleasePrimitiveArrayCritical(env, b, buf, 0); 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return adler; 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJNIEXPORT jint JNICALL 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr JastrzebskiJava_java_util_zip_Adler32_updateByteBuffer(JNIEnv *env, jclass cls, jint adler, 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski jlong address, jint off, jint len) 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski{ 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski Bytef *buf = (Bytef *)jlong_to_ptr(address); 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (buf) { 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski adler = adler32(adler, buf + off, len); 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return adler; 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 723ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak 733ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniakstatic JNINativeMethod gMethods[] = { 743ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak NATIVE_METHOD(Adler32, update, "(II)I"), 753ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak NATIVE_METHOD(Adler32, updateBytes, "(I[BII)I"), 763ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak NATIVE_METHOD(Adler32, updateByteBuffer, "(IJII)I"), 773ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak}; 783ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak 793ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniakvoid register_java_util_zip_Adler32(JNIEnv* env) { 803ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak jniRegisterNativeMethods(env, "java/util/zip/Adler32", gMethods, NELEM(gMethods)); 813ecf5a6acea7b312ca410f52ac5b1e993ba710c9Przemyslaw Szczepaniak} 82