1*0797b24eSAndroid Build Coastguard Worker /* 2*0797b24eSAndroid Build Coastguard Worker * Copyright (C) 2020 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 /** 18*0797b24eSAndroid Build Coastguard Worker * @addtogroup FileDescriptor File Descriptor 19*0797b24eSAndroid Build Coastguard Worker * @{ 20*0797b24eSAndroid Build Coastguard Worker */ 21*0797b24eSAndroid Build Coastguard Worker 22*0797b24eSAndroid Build Coastguard Worker /** 23*0797b24eSAndroid Build Coastguard Worker * @file file_descriptor_jni.h 24*0797b24eSAndroid Build Coastguard Worker */ 25*0797b24eSAndroid Build Coastguard Worker 26*0797b24eSAndroid Build Coastguard Worker #pragma once 27*0797b24eSAndroid Build Coastguard Worker 28*0797b24eSAndroid Build Coastguard Worker #include <sys/cdefs.h> 29*0797b24eSAndroid Build Coastguard Worker 30*0797b24eSAndroid Build Coastguard Worker #include <jni.h> 31*0797b24eSAndroid Build Coastguard Worker 32*0797b24eSAndroid Build Coastguard Worker #if !defined(__BIONIC__) && !defined(__INTRODUCED_IN) 33*0797b24eSAndroid Build Coastguard Worker #define __INTRODUCED_IN(x) 34*0797b24eSAndroid Build Coastguard Worker #endif 35*0797b24eSAndroid Build Coastguard Worker 36*0797b24eSAndroid Build Coastguard Worker __BEGIN_DECLS 37*0797b24eSAndroid Build Coastguard Worker 38*0797b24eSAndroid Build Coastguard Worker /** 39*0797b24eSAndroid Build Coastguard Worker * Returns a new java.io.FileDescriptor. 40*0797b24eSAndroid Build Coastguard Worker * 41*0797b24eSAndroid Build Coastguard Worker * The FileDescriptor created represents an invalid Unix file descriptor (represented by 42*0797b24eSAndroid Build Coastguard Worker * a file descriptor value of -1). 43*0797b24eSAndroid Build Coastguard Worker * 44*0797b24eSAndroid Build Coastguard Worker * Callers of this method should be aware that it can fail, returning NULL with a pending Java 45*0797b24eSAndroid Build Coastguard Worker * exception. 46*0797b24eSAndroid Build Coastguard Worker * 47*0797b24eSAndroid Build Coastguard Worker * Available since API level 31. 48*0797b24eSAndroid Build Coastguard Worker * 49*0797b24eSAndroid Build Coastguard Worker * \param env a pointer to the JNI Native Interface of the current thread. 50*0797b24eSAndroid Build Coastguard Worker * \return a java.io.FileDescriptor on success, nullptr if insufficient heap memory is available. 51*0797b24eSAndroid Build Coastguard Worker */ 52*0797b24eSAndroid Build Coastguard Worker JNIEXPORT jobject AFileDescriptor_create(JNIEnv* env) __INTRODUCED_IN(31); 53*0797b24eSAndroid Build Coastguard Worker 54*0797b24eSAndroid Build Coastguard Worker /** 55*0797b24eSAndroid Build Coastguard Worker * Returns the Unix file descriptor represented by the given java.io.FileDescriptor. 56*0797b24eSAndroid Build Coastguard Worker * 57*0797b24eSAndroid Build Coastguard Worker * A return value of -1 indicates that \a fileDescriptor represents an invalid file descriptor. 58*0797b24eSAndroid Build Coastguard Worker * 59*0797b24eSAndroid Build Coastguard Worker * Aborts the program if \a fileDescriptor is not a java.io.FileDescriptor instance. 60*0797b24eSAndroid Build Coastguard Worker * 61*0797b24eSAndroid Build Coastguard Worker * Available since API level 31. 62*0797b24eSAndroid Build Coastguard Worker * 63*0797b24eSAndroid Build Coastguard Worker * \param env a pointer to the JNI Native Interface of the current thread. 64*0797b24eSAndroid Build Coastguard Worker * \param fileDescriptor a java.io.FileDescriptor instance. 65*0797b24eSAndroid Build Coastguard Worker * \return the Unix file descriptor wrapped by \a fileDescriptor. 66*0797b24eSAndroid Build Coastguard Worker */ 67*0797b24eSAndroid Build Coastguard Worker JNIEXPORT int AFileDescriptor_getFd(JNIEnv* env, jobject fileDescriptor) __INTRODUCED_IN(31); 68*0797b24eSAndroid Build Coastguard Worker 69*0797b24eSAndroid Build Coastguard Worker /** 70*0797b24eSAndroid Build Coastguard Worker * Sets the Unix file descriptor represented by the given java.io.FileDescriptor. 71*0797b24eSAndroid Build Coastguard Worker * 72*0797b24eSAndroid Build Coastguard Worker * This function performs no validation of the Unix file descriptor argument, \a fd. Android uses 73*0797b24eSAndroid Build Coastguard Worker * the value -1 to represent an invalid file descriptor, all other values are considered valid. 74*0797b24eSAndroid Build Coastguard Worker * The validity of a file descriptor can be checked with FileDescriptor#valid(). 75*0797b24eSAndroid Build Coastguard Worker * 76*0797b24eSAndroid Build Coastguard Worker * Aborts the program if \a fileDescriptor is not a java.io.FileDescriptor instance. 77*0797b24eSAndroid Build Coastguard Worker * 78*0797b24eSAndroid Build Coastguard Worker * Available since API level 31. 79*0797b24eSAndroid Build Coastguard Worker * 80*0797b24eSAndroid Build Coastguard Worker * \param env a pointer to the JNI Native Interface of the current thread. 81*0797b24eSAndroid Build Coastguard Worker * \param fileDescriptor a java.io.FileDescriptor instance. 82*0797b24eSAndroid Build Coastguard Worker * \param fd a Unix file descriptor that \a fileDescriptor will subsequently represent. 83*0797b24eSAndroid Build Coastguard Worker */ 84*0797b24eSAndroid Build Coastguard Worker JNIEXPORT void AFileDescriptor_setFd(JNIEnv* env, jobject fileDescriptor, int fd) __INTRODUCED_IN(31); 85*0797b24eSAndroid Build Coastguard Worker 86*0797b24eSAndroid Build Coastguard Worker __END_DECLS 87*0797b24eSAndroid Build Coastguard Worker 88*0797b24eSAndroid Build Coastguard Worker /** @} */ 89