Home | History | Annotate | Download | only in syscall
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*
     23  * Copyright 1994-2003 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     28 /*	All rights reserved.	*/
     29 
     30 
     31 #pragma ident	"@(#)time.c	1.13	05/06/08 SMI"
     32 
     33 #include <sys/param.h>
     34 #include <sys/types.h>
     35 #include <sys/sysmacros.h>
     36 #include <sys/systm.h>
     37 #include <sys/tuneable.h>
     38 #include <sys/errno.h>
     39 #include <sys/proc.h>
     40 #include <sys/time.h>
     41 #include <sys/debug.h>
     42 #include <sys/policy.h>
     43 
     44 time_t
     45 gtime(void)
     46 {
     47 	return (gethrestime_sec());
     48 }
     49 
     50 int
     51 stime(time_t time)
     52 {
     53 	timestruc_t ts;
     54 
     55 	if (secpolicy_settime(CRED()) != 0)
     56 		return (set_errno(EPERM));
     57 
     58 	if (time < 0)
     59 		return (set_errno(EINVAL));
     60 
     61 	ts.tv_sec = time;
     62 	ts.tv_nsec = 0;
     63 	mutex_enter(&tod_lock);
     64 	tod_set(ts);
     65 	set_hrestime(&ts);
     66 	mutex_exit(&tod_lock);
     67 
     68 	return (0);
     69 }
     70 
     71 #if defined(_SYSCALL32_IMPL)
     72 int
     73 stime32(time32_t time)
     74 {
     75 	if (time < 0)
     76 		return (set_errno(EINVAL));
     77 
     78 	return (stime((time_t)time));
     79 }
     80 #endif
     81