Module Name: src Committed By: bouyer Date: Sat Aug 27 15:10:42 UTC 2016
Modified Files: src/sys/compat/common [netbsd-7-0]: vfs_syscalls_43.c Log Message: 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(). To generate a diff of this commit: cvs rdiff -u -r1.56 -r1.56.6.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.56 src/sys/compat/common/vfs_syscalls_43.c:1.56.6.1 --- src/sys/compat/common/vfs_syscalls_43.c:1.56 Tue Jan 28 01:29:04 2014 +++ src/sys/compat/common/vfs_syscalls_43.c Sat Aug 27 15:10:42 2016 @@ -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 @@ __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; @@ -95,9 +122,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;