Module Name: src Committed By: bouyer Date: Sat Aug 27 14:52:25 UTC 2016
Modified Files: src/sys/compat/common [netbsd-6-1]: 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.14.1 -r1.54.14.1.2.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.14.1 src/sys/compat/common/vfs_syscalls_43.c:1.54.14.1.2.1 --- src/sys/compat/common/vfs_syscalls_43.c:1.54.14.1 Thu Mar 14 16:33:09 2013 +++ src/sys/compat/common/vfs_syscalls_43.c Sat Aug 27 14:52:25 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls_43.c,v 1.54.14.1 2013/03/14 16:33:09 riz Exp $ */ +/* $NetBSD: vfs_syscalls_43.c,v 1.54.14.1.2.1 2016/08/27 14:52:25 bouyer Exp $ */ /* * Copyright (c) 1989, 1993 @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.54.14.1 2013/03/14 16:33:09 riz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls_43.c,v 1.54.14.1.2.1 2016/08/27 14:52:25 bouyer Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -74,15 +74,42 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_syscalls #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; @@ -94,9 +121,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->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;