]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix listing of Android root directory when it is accessible
authorPo Lu <luangruo@yahoo.com>
Mon, 1 Apr 2024 01:26:03 +0000 (09:26 +0800)
committerEshel Yaron <me@eshelyaron.com>
Tue, 2 Apr 2024 13:21:56 +0000 (15:21 +0200)
* src/androidvfs.c (android_root_closedir, android_root_dirfd)
(android_root_opendir): Allocate an ersatz file descriptor even
if directory is non-NULL, so that at-funcs will properly return
file status for virtual files in the root directory.

(cherry picked from commit 0cf9b58228580bfa400cdaf35eac04d375fe4785)

src/androidvfs.c

index e8eb9f2d41c1fe1d0595eb3192f447831100a80f..2e23ed40cf5b46c78258996162edeb97c203ebfc 100644 (file)
@@ -6730,7 +6730,8 @@ android_root_closedir (struct android_vdir *vdir)
 
   if (dir->directory)
     closedir (dir->directory);
-  else if (root_fd_references--)
+
+  if (root_fd_references--)
     ;
   else
     {
@@ -6745,13 +6746,7 @@ android_root_closedir (struct android_vdir *vdir)
 static int
 android_root_dirfd (struct android_vdir *vdir)
 {
-  struct android_unix_vdir *dir;
-
-  dir = (struct android_unix_vdir *) vdir;
-
-  if (dir->directory)
-    return dirfd (dir->directory);
-
+  eassert (root_fd != -1);
   return root_fd;
 }
 
@@ -6778,13 +6773,13 @@ android_root_opendir (struct android_vnode *vnode)
   dir->directory = directory;
   dir->index = 0;
 
-  if (!directory)
-    {
-      /* Allocate a temporary file descriptor for this ersatz root.  */
-      if (root_fd < 0)
-       root_fd = open ("/dev/null", O_RDONLY | O_CLOEXEC);
-      root_fd_references++;
-    }
+  /* Allocate a temporary file descriptor for this ersatz root.  This is
+     required regardless of the value of DIRECTORY, as android_fstatat
+     and co. will not defer to the VFS layer if a directory file
+     descriptor is not known to be special.  */
+  if (root_fd < 0)
+    root_fd = open ("/dev/null", O_RDONLY | O_CLOEXEC);
+  root_fd_references++;
 
   return &dir->vdir;
 }