aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Chang <vichang@google.com>2024-02-16 17:18:11 +0000
committerVictor Chang <vichang@google.com>2024-02-19 12:43:08 +0000
commitb779a29c6da5400e05e05af3f4b890daed0b6369 (patch)
tree81a0c186ba121c7b58adf858c936ef5b72c33016
parentd762036b49779560ad9ef9e1d7b5d5eed53d2302 (diff)
downloadlibnativehelper-b779a29c6da5400e05e05af3f4b890daed0b6369.tar.gz
AFileDescriptor_setFd should invoke setInt$
Modifying the descriptor field directly causes that other fields are not updated accordingly. Bug: 270692319 Test: atest CtsLibcoreOjTestCases:test.java.io Change-Id: I3cceab946ebfccd993289d59f142a6f5ec0eeaba
-rw-r--r--JniConstants.c1
-rw-r--r--JniConstants.h1
-rw-r--r--file_descriptor_jni.c2
3 files changed, 3 insertions, 1 deletions
diff --git a/JniConstants.c b/JniConstants.c
index 177298e..792c209 100644
--- a/JniConstants.c
+++ b/JniConstants.c
@@ -36,6 +36,7 @@
// <Class, method, method-string, signature, is_static>
#define JMETHODID_CONSTANTS_LIST(V) \
V(FileDescriptor, init, "<init>", "()V", false) \
+ V(FileDescriptor, setInt$, "setInt$", "(I)V", false) \
V(NIOAccess, getBaseArray, "getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;", true) \
V(NIOAccess, getBaseArrayOffset, "getBaseArrayOffset", "(Ljava/nio/Buffer;)I", true) \
V(NioBuffer, array, "array", "()Ljava/lang/Object;", false) \
diff --git a/JniConstants.h b/JniConstants.h
index cb8992d..250f94b 100644
--- a/JniConstants.h
+++ b/JniConstants.h
@@ -39,6 +39,7 @@ jclass JniConstants_NioBufferClass(JNIEnv* env);
// JniConstants.c.
//
jmethodID JniConstants_FileDescriptor_init(JNIEnv* env);
+jmethodID JniConstants_FileDescriptor_setInt$(JNIEnv* env);
jmethodID JniConstants_NIOAccess_getBaseArray(JNIEnv* env);
jmethodID JniConstants_NIOAccess_getBaseArrayOffset(JNIEnv* env);
jmethodID JniConstants_NioBuffer_array(JNIEnv* env);
diff --git a/file_descriptor_jni.c b/file_descriptor_jni.c
index bfae4af..81ed323 100644
--- a/file_descriptor_jni.c
+++ b/file_descriptor_jni.c
@@ -43,5 +43,5 @@ JNIEXPORT int AFileDescriptor_getFd(JNIEnv* env, jobject fileDescriptor) {
JNIEXPORT void AFileDescriptor_setFd(JNIEnv* env, jobject fileDescriptor, int fd) {
EnsureArgumentIsFileDescriptor(env, fileDescriptor);
- (*env)->SetIntField(env, fileDescriptor, JniConstants_FileDescriptor_descriptor(env), fd);
+ (*env)->CallVoidMethod(env, fileDescriptor, JniConstants_FileDescriptor_setInt$(env), fd);
}