1*0797b24eSAndroid Build Coastguard Worker /* 2*0797b24eSAndroid Build Coastguard Worker * Copyright (C) 2007 The Android Open Source Project 3*0797b24eSAndroid Build Coastguard Worker * 4*0797b24eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*0797b24eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*0797b24eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*0797b24eSAndroid Build Coastguard Worker * 8*0797b24eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*0797b24eSAndroid Build Coastguard Worker * 10*0797b24eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*0797b24eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*0797b24eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*0797b24eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*0797b24eSAndroid Build Coastguard Worker * limitations under the License. 15*0797b24eSAndroid Build Coastguard Worker */ 16*0797b24eSAndroid Build Coastguard Worker 17*0797b24eSAndroid Build Coastguard Worker /** JNI utils for nativehelper-internal use. */ 18*0797b24eSAndroid Build Coastguard Worker 19*0797b24eSAndroid Build Coastguard Worker #pragma once 20*0797b24eSAndroid Build Coastguard Worker 21*0797b24eSAndroid Build Coastguard Worker #include <jni.h> 22*0797b24eSAndroid Build Coastguard Worker 23*0797b24eSAndroid Build Coastguard Worker #if defined(__cplusplus) 24*0797b24eSAndroid Build Coastguard Worker 25*0797b24eSAndroid Build Coastguard Worker #if !defined(DISALLOW_COPY_AND_ASSIGN) 26*0797b24eSAndroid Build Coastguard Worker // DISALLOW_COPY_AND_ASSIGN disallows the copy and operator= functions. It goes in the private: 27*0797b24eSAndroid Build Coastguard Worker // declarations in a class. 28*0797b24eSAndroid Build Coastguard Worker #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ 29*0797b24eSAndroid Build Coastguard Worker TypeName(const TypeName&) = delete; \ 30*0797b24eSAndroid Build Coastguard Worker void operator=(const TypeName&) = delete 31*0797b24eSAndroid Build Coastguard Worker #endif // !defined(DISALLOW_COPY_AND_ASSIGN) 32*0797b24eSAndroid Build Coastguard Worker 33*0797b24eSAndroid Build Coastguard Worker // This seems a header-only include. Provide NPE throwing. jniThrowNullPointerException(JNIEnv * env)34*0797b24eSAndroid Build Coastguard Workerstatic inline int jniThrowNullPointerException(JNIEnv* env) { 35*0797b24eSAndroid Build Coastguard Worker if (env->ExceptionCheck()) { 36*0797b24eSAndroid Build Coastguard Worker // Drop any pending exception. 37*0797b24eSAndroid Build Coastguard Worker env->ExceptionClear(); 38*0797b24eSAndroid Build Coastguard Worker } 39*0797b24eSAndroid Build Coastguard Worker 40*0797b24eSAndroid Build Coastguard Worker jclass e_class = env->FindClass("java/lang/NullPointerException"); 41*0797b24eSAndroid Build Coastguard Worker if (e_class == nullptr) { 42*0797b24eSAndroid Build Coastguard Worker return -1; 43*0797b24eSAndroid Build Coastguard Worker } 44*0797b24eSAndroid Build Coastguard Worker 45*0797b24eSAndroid Build Coastguard Worker if (env->ThrowNew(e_class, nullptr) != JNI_OK) { 46*0797b24eSAndroid Build Coastguard Worker env->DeleteLocalRef(e_class); 47*0797b24eSAndroid Build Coastguard Worker return -1; 48*0797b24eSAndroid Build Coastguard Worker } 49*0797b24eSAndroid Build Coastguard Worker 50*0797b24eSAndroid Build Coastguard Worker env->DeleteLocalRef(e_class); 51*0797b24eSAndroid Build Coastguard Worker return 0; 52*0797b24eSAndroid Build Coastguard Worker } 53*0797b24eSAndroid Build Coastguard Worker 54*0797b24eSAndroid Build Coastguard Worker #endif // defined(__cplusplus) 55*0797b24eSAndroid Build Coastguard Worker 56