xref: /aosp_15_r20/libnativehelper/include/android/file_descriptor_jni.h (revision 0797b24ee566c78eb48500180cb4bf71f81c8aab)
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