1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <android/file_descriptor_jni.h> 18 19 #include <stddef.h> 20 21 #define LOG_TAG "file_descriptor_jni" 22 #include "ALog-priv.h" 23 24 #include "JniConstants.h" 25 26 static void EnsureArgumentIsFileDescriptor(JNIEnv* env, jobject instance) { 27 ALOG_ALWAYS_FATAL_IF(instance == NULL, "FileDescriptor is NULL"); 28 jclass jifd = JniConstants_FileDescriptorClass(env); 29 ALOG_ALWAYS_FATAL_IF(!(*env)->IsInstanceOf(env, instance, jifd), 30 "Argument is not a FileDescriptor"); 31 } 32 33 JNIEXPORT _Nullable jobject AFileDescriptor_create(JNIEnv* env) { 34 return (*env)->NewObject(env, 35 JniConstants_FileDescriptorClass(env), 36 JniConstants_FileDescriptor_init(env)); 37 } 38 39 JNIEXPORT int AFileDescriptor_getFd(JNIEnv* env, jobject fileDescriptor) { 40 EnsureArgumentIsFileDescriptor(env, fileDescriptor); 41 return (*env)->GetIntField(env, fileDescriptor, JniConstants_FileDescriptor_descriptor(env)); 42 } 43 44 JNIEXPORT void AFileDescriptor_setFd(JNIEnv* env, jobject fileDescriptor, int fd) { 45 EnsureArgumentIsFileDescriptor(env, fileDescriptor); 46 (*env)->SetIntField(env, fileDescriptor, JniConstants_FileDescriptor_descriptor(env), fd); 47 } 48