Module Name:src
Committed By: bouyer
Date: Sat Aug 27 14:51:50 UTC 2016
Modified Files:
src/sys/compat/common [netbsd-6-0]: vfs_syscalls_43.c
Log Message:
Pull up following revision(s) (requested by mrg in ticket #1400):
sys/compat/common/vfs_syscalls_43.c: revision 1.58
fill in the tv_nsec parts of the converted timespec in cvtstat().
To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.54.20.1 src/sys/compat/common/vfs_syscalls_43.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/compat/common/vfs_syscalls_43.c
diff -u src/sys/compat/common/vfs_syscalls_43.c:1.54 src/sys/compat/common/vfs_syscalls_43.c:1.54.20.1
--- src/sys/compat/common/vfs_syscalls_43.c:1.54 Fri Nov 19 06:44:36 2010
+++ src/sys/compat/common/vfs_syscalls_43.c Sat Aug 27 14:51:50 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls_43.c,v 1.54 2010/11/19 06:44:36 dholland Exp $ */
+/* $NetBSD: vfs_syscalls_43.c,v 1.54.20.1 2016/08/27 14:51:50 bouyer Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -37,7 +37,7 @@
*/
#include
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.54 2010/11/19 06:44:36 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.54.20.1 2016/08/27 14:51:50 bouyer Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -72,15 +72,42 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls
#include
+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 & 0x;
@@ -92,9 +119,9 @@ cvtstat(struct stat *st, struct stat43 *
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_atimespec, >st_atimespec);
+ cvttimespec(>st_mtimespec, >st_mtimespec);
+ cvttimespec(>st_ctimespec, >st_ctimespec);
ost->st_blksize = st->st_blksize;
ost->st_blocks = st->st_blocks;
ost->st_flags = st->st_flags;