Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/kern/kern_time.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/kern/kern_time.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.145.2.4 retrieving revision 1.145.2.5 diff -u -p -r1.145.2.4 -r1.145.2.5 --- src/sys/kern/kern_time.c 2010/03/11 15:04:18 1.145.2.4 +++ src/sys/kern/kern_time.c 2010/08/11 22:54:41 1.145.2.5 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_time.c,v 1.145.2.4 2010/03/11 15:04:18 yamt Exp $ */ +/* $NetBSD: kern_time.c,v 1.145.2.5 2010/08/11 22:54:41 yamt Exp $ */ /*- * Copyright (c) 2000, 2004, 2005, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.145.2.4 2010/03/11 15:04:18 yamt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_time.c,v 1.145.2.5 2010/08/11 22:54:41 yamt Exp $"); #include #include @@ -178,22 +178,32 @@ sys___clock_gettime50(struct lwp *l, syscallarg(clockid_t) clock_id; syscallarg(struct timespec *) tp; } */ - clockid_t clock_id; + int error; struct timespec ats; - clock_id = SCARG(uap, clock_id); + error = clock_gettime1(SCARG(uap, clock_id), &ats); + if (error != 0) + return error; + + return copyout(&ats, SCARG(uap, tp), sizeof(ats)); +} + +int +clock_gettime1(clockid_t clock_id, struct timespec *ts) +{ + switch (clock_id) { case CLOCK_REALTIME: - nanotime(&ats); + nanotime(ts); break; case CLOCK_MONOTONIC: - nanouptime(&ats); + nanouptime(ts); break; default: - return (EINVAL); + return EINVAL; } - return copyout(&ats, SCARG(uap, tp), sizeof(ats)); + return 0; } /* ARGSUSED */ @@ -243,28 +253,36 @@ sys___clock_getres50(struct lwp *l, cons syscallarg(clockid_t) clock_id; syscallarg(struct timespec *) tp; } */ - clockid_t clock_id; struct timespec ts; int error = 0; - clock_id = SCARG(uap, clock_id); + if ((error = clock_getres1(SCARG(uap, clock_id), &ts)) != 0) + return error; + + if (SCARG(uap, tp)) + error = copyout(&ts, SCARG(uap, tp), sizeof(ts)); + + return error; +} + +int +clock_getres1(clockid_t clock_id, struct timespec *ts) +{ + switch (clock_id) { case CLOCK_REALTIME: case CLOCK_MONOTONIC: - ts.tv_sec = 0; + ts->tv_sec = 0; if (tc_getfrequency() > 1000000000) - ts.tv_nsec = 1; + ts->tv_nsec = 1; else - ts.tv_nsec = 1000000000 / tc_getfrequency(); + ts->tv_nsec = 1000000000 / tc_getfrequency(); break; default: - return (EINVAL); + return EINVAL; } - if (SCARG(uap, tp)) - error = copyout(&ts, SCARG(uap, tp), sizeof(ts)); - - return error; + return 0; } /* ARGSUSED */