emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 7fb0248a33d: Port to the Android NDK r10b


From: Po Lu
Subject: master 7fb0248a33d: Port to the Android NDK r10b
Date: Mon, 7 Aug 2023 01:04:12 -0400 (EDT)

branch: master
commit 7fb0248a33dc721ae570c294b04f6da94cd96b10
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Port to the Android NDK r10b
    
    * src/androidvfs.c (android_saf_stat, android_saf_file_open)
    (android_fstat): Eschew accessing POSIX timespec fields in
    struct stat, employing accessors supplied in Gnulib stat-time.h
    in their place.
---
 src/androidvfs.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/androidvfs.c b/src/androidvfs.c
index 5afa752163d..4234e337acb 100644
--- a/src/androidvfs.c
+++ b/src/androidvfs.c
@@ -31,6 +31,8 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <sys/stat.h>
 #include <sys/mman.h>
 
+#include <stat-time.h>
+
 #include <linux/ashmem.h>
 
 #include "android.h"
@@ -4011,8 +4013,15 @@ android_saf_stat (const char *uri_name, const char 
*id_name,
   memset (statb, 0, sizeof *statb);
   statb->st_size = MAX (0, MIN (TYPE_MAXIMUM (off_t), size));
   statb->st_mode = mode;
-  statb->st_mtim.tv_sec = mtim / 1000;
-  statb->st_mtim.tv_nsec = (mtim % 1000) * 1000000;
+#ifdef STAT_TIMESPEC
+  STAT_TIMESPEC (statb, st_mtim).tv_sec = mtim / 1000;
+  STAT_TIMESPEC (statb, st_mtim).tv_nsec = (mtim % 1000) * 1000000;
+#else /* !STAT_TIMESPEC */
+  /* Headers supplied by the NDK r10b contain a `struct stat' without
+     POSIX fields for nano-second timestamps.  */
+  statb->st_mtime = mtim / 1000;
+  statb->st_mtime_nsec = (mtim % 1000) * 1000000;
+#endif /* STAT_TIMESPEC */
   statb->st_uid = getuid ();
   statb->st_gid = getgid ();
   return 0;
@@ -5674,7 +5683,7 @@ android_saf_file_open (struct android_vnode *vnode, int 
flags,
 
   if (!android_saf_stat (vp->tree_uri, vp->document_id,
                         &statb))
-    info->mtime = statb.st_mtim;
+    info->mtime = get_stat_mtime (&statb);
   else
     info->mtime = invalid_timespec ();
 
@@ -6678,7 +6687,12 @@ android_fstat (int fd, struct stat *statb)
       if (parcel_fd->fd == fd
          && timespec_valid_p (parcel_fd->mtime))
        {
-         statb->st_mtim = parcel_fd->mtime;
+#ifdef STAT_TIMESPEC
+         STAT_TIMESPEC (statb, st_mtim) = parcel_fd->mtime;
+#else /* !STAT_TIMESPEC */
+         statb->st_mtime = parcel_fd->mtime.tv_sec;
+         statb->st_mtime_nsec = parcel_fd->mtime.tv_nsec;
+#endif /* STAT_TIMESPEC */
          break;
        }
     }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]