Source-Changes-HG archive

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

[src/netbsd-7-0]: src/sys/compat/common Pull up following revision(s) (reques...



details:   https://anonhg.NetBSD.org/src/rev/0012f5dadbdd
branches:  netbsd-7-0
changeset: 801205:0012f5dadbdd
user:      bouyer <bouyer%NetBSD.org@localhost>
date:      Sat Aug 27 15:10:42 2016 +0000

description:
Pull up following revision(s) (requested by mrg in ticket #1240):
        sys/compat/common/vfs_syscalls_43.c: revision 1.58
fill in the tv_nsec parts of the converted timespec in cvtstat().

diffstat:

 sys/compat/common/vfs_syscalls_43.c |  37 ++++++++++++++++++++++++++++++++-----
 1 files changed, 32 insertions(+), 5 deletions(-)

diffs (74 lines):

diff -r fa55556f6514 -r 0012f5dadbdd sys/compat/common/vfs_syscalls_43.c
--- a/sys/compat/common/vfs_syscalls_43.c       Sat Aug 27 15:09:48 2016 +0000
+++ b/sys/compat/common/vfs_syscalls_43.c       Sat Aug 27 15:10:42 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vfs_syscalls_43.c,v 1.56 2014/01/28 01:29:04 christos Exp $    */
+/*     $NetBSD: vfs_syscalls_43.c,v 1.56.6.1 2016/08/27 15:10:42 bouyer Exp $  */
 
 /*
  * Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.56 2014/01/28 01:29:04 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.56.6.1 2016/08/27 15:10:42 bouyer Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -75,15 +75,42 @@
 #include <compat/common/compat_util.h>
 #include <compat/common/compat_mod.h>
 
+static void cvttimespec(struct timespec *, struct timespec50 *);
 static void cvtstat(struct stat *, struct stat43 *);
 
 /*
+ * Convert from an old to a new timespec structure.
+ */
+static void
+cvttimespec(struct timespec *ts, struct timespec50 *ots)
+{
+
+       if (ts->tv_sec > INT_MAX) {
+#if defined(DEBUG) || 1
+               static bool first = true;
+
+               if (first) {
+                       first = false;
+                       printf("%s[%s:%d]: time_t does not fit\n",
+                           __func__, curlwp->l_proc->p_comm,
+                           curlwp->l_lid);
+               }
+#endif
+               ots->tv_sec = INT_MAX;
+       } else
+               ots->tv_sec = ts->tv_sec;
+       ots->tv_nsec = ts->tv_nsec;
+}
+
+/*
  * Convert from an old to a new stat structure.
  */
 static void
 cvtstat(struct stat *st, struct stat43 *ost)
 {
 
+       /* Handle any padding. */
+       memset(ost, 0, sizeof *ost);
        ost->st_dev = st->st_dev;
        ost->st_ino = st->st_ino;
        ost->st_mode = st->st_mode & 0xffff;
@@ -95,9 +122,9 @@
                ost->st_size = st->st_size;
        else
                ost->st_size = -2;
-       ost->st_atime = st->st_atime;
-       ost->st_mtime = st->st_mtime;
-       ost->st_ctime = st->st_ctime;
+       cvttimespec(&st->st_atimespec, &ost->st_atimespec);
+       cvttimespec(&st->st_mtimespec, &ost->st_mtimespec);
+       cvttimespec(&st->st_ctimespec, &ost->st_ctimespec);
        ost->st_blksize = st->st_blksize;
        ost->st_blocks = st->st_blocks;
        ost->st_flags = st->st_flags;



Home | Main Index | Thread Index | Old Index