1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #include "hy2sie.h" 19 #include "sieb.h" 20 21 #include "zlib.h" 22 23 JNIEXPORT jlong JNICALL 24 Java_java_util_zip_CRC32_updateImpl (JNIEnv * env, jobject recv, 25 jbyteArray buf, int off, int len, 26 jlong crc) 27 { 28 jbyte* b = ((*env)->GetPrimitiveArrayCritical (env, buf, 0)); 29 if (b == NULL) { 30 return -1; 31 } 32 jlong result = crc32 ((uLong) crc, (Bytef *) (b + off), (uInt) len); 33 ((*env)->ReleasePrimitiveArrayCritical (env, buf, b, JNI_ABORT)); 34 return result; 35 } 36 37 JNIEXPORT jlong JNICALL 38 Java_java_util_zip_CRC32_updateByteImpl (JNIEnv * env, jobject recv, 39 jbyte val, jlong crc) 40 { 41 return crc32 ((uLong) crc, (Bytef *) (&val), 1); 42 } 43 44 45 /* 46 * JNI registration 47 */ 48 static JNINativeMethod gMethods[] = { 49 /* name, signature, funcPtr */ 50 { "updateImpl", "([BIIJ)J", Java_java_util_zip_CRC32_updateImpl }, 51 { "updateByteImpl", "(BJ)J", Java_java_util_zip_CRC32_updateByteImpl }, 52 }; 53 int register_java_util_zip_CRC32(JNIEnv* env) 54 { 55 return jniRegisterNativeMethods(env, "java/util/zip/CRC32", 56 gMethods, NELEM(gMethods)); 57 } 58