summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2024-04-20 20:44:30 +0800
committerPo Lu <luangruo@yahoo.com>2024-04-20 20:46:17 +0800
commit571fd42d48a0d99b7b210bd218836bd2f6ce2ccf (patch)
treeb69f859170af2f803c8677b94d440979c1c37336 /src
parent9ea415cde3c602f5f13e4425ca508700b8118ffb (diff)
Eliminate minor wart in EmacsService.java
* java/org/gnu/emacs/EmacsService.java (openContentUri): Replace arg BYTES with URI and change its type to String. * src/android.c (android_init_emacs_service): * src/androidvfs.c (android_authority_name) (android_authority_open): Adjust commentary and code to match.
Diffstat (limited to 'src')
-rw-r--r--src/android.c2
-rw-r--r--src/androidvfs.c32
2 files changed, 9 insertions, 25 deletions
diff --git a/src/android.c b/src/android.c
index 507ffc458d8..7a7eadc946a 100644
--- a/src/android.c
+++ b/src/android.c
@@ -1632,7 +1632,7 @@ android_init_emacs_service (void)
FIND_METHOD (reset_ic, "resetIC",
"(Lorg/gnu/emacs/EmacsWindow;I)V");
FIND_METHOD (open_content_uri, "openContentUri",
- "([BZZZ)I");
+ "(Ljava/lang/String;ZZZ)I");
FIND_METHOD (check_content_uri, "checkContentUri",
"(Ljava/lang/String;ZZ)Z");
FIND_METHOD (query_battery, "queryBattery", "()[J");
diff --git a/src/androidvfs.c b/src/androidvfs.c
index 88ea345a298..9e65dd2b140 100644
--- a/src/androidvfs.c
+++ b/src/androidvfs.c
@@ -3130,8 +3130,10 @@ android_authority_name (struct android_vnode *vnode, char *name,
return NULL;
}
- /* NAME must be a valid JNI string, so that it can be encoded
- properly. */
+ /* If the URI is not a valid JNI string, return immediately. This
+ should not be possible, since /content file names are encoded
+ into JNI strings at the naming stage; the check is performed
+ only out of an abundance of caution. */
if (android_verify_jni_string (name))
goto no_entry;
@@ -3169,7 +3171,6 @@ android_authority_open (struct android_vnode *vnode, int flags,
AAsset **asset)
{
struct android_authority_vnode *vp;
- size_t length;
jobject string;
int fd;
JNIEnv *env;
@@ -3189,22 +3190,11 @@ android_authority_open (struct android_vnode *vnode, int flags,
feasible. */
env = android_java_env;
- /* Allocate a buffer to hold the file name. */
- length = strlen (vp->uri);
- string = (*env)->NewByteArray (env, length);
- if (!string)
- {
- (*env)->ExceptionClear (env);
- errno = ENOMEM;
- return -1;
- }
-
- /* Copy the URI into this byte array. */
- (*env)->SetByteArrayRegion (env, string, 0, length,
- (jbyte *) vp->uri);
+ /* Allocate a JNI string to hold VP->uri. */
+ string = (*env)->NewStringUTF (env, vp->uri);
+ android_exception_check ();
/* Try to open the file descriptor. */
-
fd = (*env)->CallNonvirtualIntMethod (env, emacs_service,
service_class.class,
service_class.open_content_uri,
@@ -3215,13 +3205,7 @@ android_authority_open (struct android_vnode *vnode, int flags,
(jboolean) !(mode & O_WRONLY),
(jboolean) ((mode & O_TRUNC)
!= 0));
- if ((*env)->ExceptionCheck (env))
- {
- (*env)->ExceptionClear (env);
- errno = ENOMEM;
- ANDROID_DELETE_LOCAL_REF (string);
- return -1;
- }
+ android_exception_check_1 (string);
/* If fd is -1, just assume that the file does not exist,
and return -1 with errno set to ENOENT. */