xref: /aosp_15_r20/libnativehelper/header_only_include/nativehelper/nativehelper_utils.h (revision 0797b24ee566c78eb48500180cb4bf71f81c8aab)
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 Worker static 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