From fa69c81bbdfb9fd189e4cc06d9ba25bdc90649db Mon Sep 17 00:00:00 2001 From: Peter Avalos Date: Sun, 15 Mar 2009 01:09:48 -1000 Subject: [PATCH] time() C99 compliance: * time() always sets its return value in both places (if present), even on error. Obtained-from: FreeBSD --- lib/libc/gen/time.3 | 67 ++++++++++++++++++++++++++++++++--------------------- lib/libc/gen/time.c | 16 ++++++------- 2 files changed, 48 insertions(+), 35 deletions(-) diff --git a/lib/libc/gen/time.3 b/lib/libc/gen/time.3 index f39c59560f..329a4d8858 100644 --- a/lib/libc/gen/time.3 +++ b/lib/libc/gen/time.3 @@ -13,10 +13,6 @@ .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. @@ -34,10 +30,10 @@ .\" SUCH DAMAGE. .\" .\" @(#)time.3 8.1 (Berkeley) 6/4/93 -.\" $FreeBSD: src/lib/libc/gen/time.3,v 1.5.2.5 2001/12/14 18:33:51 ru Exp $ +.\" $FreeBSD: src/lib/libc/gen/time.3,v 1.15 2007/01/09 00:27:55 imp Exp $ .\" $DragonFly: src/lib/libc/gen/time.3,v 1.2 2003/06/17 04:26:42 dillon Exp $ .\" -.Dd June 4, 1993 +.Dd July 18, 2003 .Dt TIME 3 .Os .Sh NAME @@ -55,34 +51,51 @@ The function returns the value of time in seconds since 0 hours, 0 minutes, 0 seconds, January 1, 1970, Coordinated Universal Time. -.Pp -A copy of the time value may be saved to the area indicated by the -pointer -.Fa tloc . -If -.Fa tloc -is a NULL pointer, no value is stored. -.Pp -Upon successful completion, +If an error occurs, .Fn time -returns the value of time. -Otherwise a value of -.Pq Po Vt time_t Pc \-1 -is returned and the global variable -.Va errno -is set to indicate the error. +returns the value +.Po Vt time_t Pc Ns \-1 . +.Pp +The return value is also stored in +.No \&* Ns Va tloc , +provided that +.Va tloc +is non-null. .Sh ERRORS -The following error codes may be set in -.Va errno : -.Bl -tag -width Er -.It Bq Er EFAULT -An argument address referenced invalid memory. -.El +The +.Fn time +function may fail for any of the reasons described in +.Xr gettimeofday 2 . .Sh SEE ALSO .Xr gettimeofday 2 , .Xr ctime 3 +.Sh STANDARDS +The +.Nm +function conforms to +.St -p1003.1-2001 . .Sh HISTORY A .Fn time function appeared in .At v6 . +.Sh BUGS +Neither +.St -isoC-99 +nor +.St -p1003.1-2001 +requires +.Fn time +to set +.Va errno +on failure; thus, it is impossible for an application to distinguish +the valid time value \-1 (representing the last UTC second of 1969) +from the error return value. +.Pp +Systems conforming to earlier versions of the C and +.Tn POSIX +standards (including older versions of +.Fx ) +did not set +.No \&* Ns Va tloc +in the error case. diff --git a/lib/libc/gen/time.c b/lib/libc/gen/time.c index b73d978420..326ab59e36 100644 --- a/lib/libc/gen/time.c +++ b/lib/libc/gen/time.c @@ -10,10 +10,6 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. @@ -31,6 +27,7 @@ * SUCH DAMAGE. * * @(#)time.c 8.1 (Berkeley) 6/4/93 + * $FreeBSD: src/lib/libc/gen/time.c,v 1.5 2007/01/09 00:27:55 imp Exp $ * $DragonFly: src/lib/libc/gen/time.c,v 1.3 2005/11/13 00:07:42 swildner Exp $ */ @@ -41,10 +38,13 @@ time_t time(time_t *t) { struct timeval tt; + time_t retval; if (gettimeofday(&tt, (struct timezone *)0) < 0) - return(-1); - if (t) - *t = tt.tv_sec; - return(tt.tv_sec); + retval = -1; + else + retval = tt.tv_sec; + if (t != NULL) + *t = retval; + return (retval); } -- 2.11.4.GIT