time() C99 compliance:
authorPeter Avalos <pavalos@theshell.com>
Sun, 15 Mar 2009 11:09:48 +0000 (01:09 -1000)
committerPeter Avalos <pavalos@theshell.com>
Tue, 7 Apr 2009 07:10:02 +0000 (21:10 -1000)
* time() always sets its return value in both places (if present),
even on error.

Obtained-from: FreeBSD

lib/libc/gen/time.3
lib/libc/gen/time.c

index f39c595..329a4d8 100644 (file)
 .\" 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.
 .\" 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.
index b73d978..326ab59 100644 (file)
  * 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);
 }