2  * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. The rights granted to you under the License 
  10  * may not be used to create, or enable the creation or redistribution of, 
  11  * unlawful or unlicensed copies of an Apple operating system, or to 
  12  * circumvent, violate, or enable the circumvention or violation of, any 
  13  * terms of an Apple operating system software license agreement. 
  15  * Please obtain a copy of the License at 
  16  * http://www.opensource.apple.com/apsl/ and read it before using this file. 
  18  * The Original Code and all software distributed under the License are 
  19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  23  * Please see the License for the specific language governing rights and 
  24  * limitations under the License. 
  26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 
  28 /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ 
  30  * Copyright (c) 1982, 1986, 1993 
  31  *      The Regents of the University of California.  All rights reserved. 
  33  * Redistribution and use in source and binary forms, with or without 
  34  * modification, are permitted provided that the following conditions 
  36  * 1. Redistributions of source code must retain the above copyright 
  37  *    notice, this list of conditions and the following disclaimer. 
  38  * 2. Redistributions in binary form must reproduce the above copyright 
  39  *    notice, this list of conditions and the following disclaimer in the 
  40  *    documentation and/or other materials provided with the distribution. 
  41  * 3. All advertising materials mentioning features or use of this software 
  42  *    must display the following acknowledgement: 
  43  *      This product includes software developed by the University of 
  44  *      California, Berkeley and its contributors. 
  45  * 4. Neither the name of the University nor the names of its contributors 
  46  *    may be used to endorse or promote products derived from this software 
  47  *    without specific prior written permission. 
  49  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  50  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  51  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  52  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  53  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  54  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  55  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  56  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  57  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  58  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  61  *      @(#)time.h      8.2 (Berkeley) 7/10/94 
  67 #include <sys/cdefs.h> 
  68 #include <sys/_types.h> 
  70 #include <machine/types.h>      /* user_time_t */ 
  72 #include <Availability.h> 
  76  * [XSI] The fd_set type shall be defined as described in <sys/select.h>. 
  77  * The timespec structure shall be defined as described in <time.h> 
  80 #define __need_struct_timespec 
  81 #define __need_struct_timeval 
  83 #define __need_struct_user_timespec 
  84 #define __need_struct_user32_timespec 
  85 #define __need_struct_user64_timespec 
  86 #define __need_struct_user_timeval 
  87 #define __need_struct_user32_timeval 
  88 #define __need_struct_user64_timeval 
  89 #define __need_struct_user32_itimerval 
  90 #define __need_struct_user64_itimerval 
  92 #include <sys/_structs.h> 
  96 typedef __darwin_time_t 
time_t; 
 101 typedef __darwin_suseconds_t    suseconds_t
; 
 105  * Structure used as a parameter by getitimer(2) and setitimer(2) system 
 109         struct  timeval it_interval
;    /* timer interval */ 
 110         struct  timeval it_value
;       /* current value */ 
 114  * Names of the interval timers, and structure 
 115  * defining a timer setting. 
 117 #define ITIMER_REAL     0 
 118 #define ITIMER_VIRTUAL  1 
 119 #define ITIMER_PROF     2 
 122  * Select uses bit masks of file descriptors in longs.  These macros 
 123  * manipulate such bit fields (the filesystem macros use chars).  The 
 124  * extra protection here is to permit application redefinition above 
 128 #define FD_SETSIZE      __DARWIN_FD_SETSIZE 
 129 #endif  /* FD_SETSIZE */ 
 131 #define FD_SET(n, p)    __DARWIN_FD_SET(n, p) 
 134 #define FD_CLR(n,p)     __DARWIN_FD_CLR(n, p) 
 137 #define FD_ISSET(n, p)  __DARWIN_FD_ISSET(n, p) 
 138 #endif  /* FD_ISSET */ 
 140 #define FD_ZERO(p)      __DARWIN_FD_ZERO(p) 
 143 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 
 146 #define FD_COPY(f, t)   __DARWIN_FD_COPY(f, t) 
 149 #define TIMEVAL_TO_TIMESPEC(tv, ts) {                                   \ 
 150         (ts)->tv_sec = (tv)->tv_sec;                                    \ 
 151         (ts)->tv_nsec = (tv)->tv_usec * 1000;                           \ 
 153 #define TIMESPEC_TO_TIMEVAL(tv, ts) {                                   \ 
 154         (tv)->tv_sec = (ts)->tv_sec;                                    \ 
 155         (tv)->tv_usec = (ts)->tv_nsec / 1000;                           \ 
 159         int     tz_minuteswest
; /* minutes west of Greenwich */ 
 160         int     tz_dsttime
;     /* type of dst correction */ 
 162 #define DST_NONE        0       /* not on dst */ 
 163 #define DST_USA         1       /* USA style dst */ 
 164 #define DST_AUST        2       /* Australian style dst */ 
 165 #define DST_WET         3       /* Western European dst */ 
 166 #define DST_MET         4       /* Middle European dst */ 
 167 #define DST_EET         5       /* Eastern European dst */ 
 168 #define DST_CAN         6       /* Canada */ 
 170 /* Operations on timevals. */ 
 171 #define timerclear(tvp)         (tvp)->tv_sec = (tvp)->tv_usec = 0 
 172 #define timerisset(tvp)         ((tvp)->tv_sec || (tvp)->tv_usec) 
 173 #define timercmp(tvp, uvp, cmp)                                         \ 
 174         (((tvp)->tv_sec == (uvp)->tv_sec) ?                             \ 
 175             ((tvp)->tv_usec cmp (uvp)->tv_usec) :                       \ 
 176             ((tvp)->tv_sec cmp (uvp)->tv_sec)) 
 177 #define timeradd(tvp, uvp, vvp)                                         \ 
 179                 (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;          \ 
 180                 (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;       \ 
 181                 if ((vvp)->tv_usec >= 1000000) {                        \ 
 183                         (vvp)->tv_usec -= 1000000;                      \ 
 186 #define timersub(tvp, uvp, vvp)                                         \ 
 188                 (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;          \ 
 189                 (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;       \ 
 190                 if ((vvp)->tv_usec < 0) {                               \ 
 192                         (vvp)->tv_usec += 1000000;                      \ 
 196 #define timevalcmp(l, r, cmp)   timercmp(l, r, cmp) /* freebsd */ 
 199  * Getkerninfo clock information structure 
 202         int     hz
;             /* clock frequency */ 
 203         int     tick
;           /* micro-seconds per hz tick */ 
 204         int     tickadj
;        /* clock skew rate for adjtime() */ 
 205         int     stathz
;         /* statistics clock frequency */ 
 206         int     profhz
;         /* profiling clock frequency */ 
 208 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 
 212 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 
 214 void    microtime(struct timeval 
*tv
); 
 215 void    microuptime(struct timeval 
*tv
); 
 216 #define getmicrotime(a)         microtime(a) 
 217 #define getmicrouptime(a)       microuptime(a) 
 218 void    nanotime(struct timespec 
*ts
); 
 219 void    nanouptime(struct timespec 
*ts
); 
 220 #define getnanotime(a)          nanotime(a) 
 221 #define getnanouptime(a)        nanouptime(a) 
 222 void    timevaladd(struct timeval 
*t1
, struct timeval 
*t2
); 
 223 void    timevalsub(struct timeval 
*t1
, struct timeval 
*t2
); 
 224 void    timevalfix(struct timeval 
*t1
); 
 225 #ifdef  BSD_KERNEL_PRIVATE 
 226 time_t  boottime_sec(void); 
 227 void    inittodr(time_t base
) __attribute__((section("__TEXT, initcode"))); 
 228 #endif /* BSD_KERNEL_PRIVATE */ 
 232 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 
 236 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 
 238 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 
 242 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) 
 243 int     adjtime(const struct timeval 
*, struct timeval 
*); 
 244 int     futimes(int, const struct timeval 
*); 
 245 int     lutimes(const char *, const struct timeval 
*) __OSX_AVAILABLE_STARTING(__MAC_10_5
, __IPHONE_2_0
); 
 246 int     settimeofday(const struct timeval 
*, const struct timezone 
*); 
 247 #endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */ 
 249 int     getitimer(int, struct itimerval 
*); 
 250 int     gettimeofday(struct timeval 
* __restrict
, void * __restrict
); 
 252 #include <sys/_select.h>        /* select() prototype */ 
 254 int     setitimer(int, const struct itimerval 
* __restrict
, 
 255                 struct itimerval 
* __restrict
); 
 256 int     utimes(const char *, const struct timeval 
*); 
 262 #endif /* !_SYS_TIME_H_ */