1*53ee8cc1Swenshuai.xi /* time.h -- An implementation of the standard Unix <sys/time.h> file. 2*53ee8cc1Swenshuai.xi Written by Geoffrey Noer <noer@cygnus.com> 3*53ee8cc1Swenshuai.xi Public domain; no rights reserved. */ 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xi #ifndef _SYS_TIME_H_ 6*53ee8cc1Swenshuai.xi #define _SYS_TIME_H_ 7*53ee8cc1Swenshuai.xi 8*53ee8cc1Swenshuai.xi #include <_ansi.h> 9*53ee8cc1Swenshuai.xi #include <sys/types.h> 10*53ee8cc1Swenshuai.xi 11*53ee8cc1Swenshuai.xi #ifdef __cplusplus 12*53ee8cc1Swenshuai.xi extern "C" { 13*53ee8cc1Swenshuai.xi #endif 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xi #ifndef _WINSOCK_H 16*53ee8cc1Swenshuai.xi struct timeval { 17*53ee8cc1Swenshuai.xi long tv_sec; 18*53ee8cc1Swenshuai.xi long tv_usec; 19*53ee8cc1Swenshuai.xi }; 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi struct timezone { 22*53ee8cc1Swenshuai.xi int tz_minuteswest; 23*53ee8cc1Swenshuai.xi int tz_dsttime; 24*53ee8cc1Swenshuai.xi }; 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi #ifdef __CYGWIN__ 27*53ee8cc1Swenshuai.xi #include <cygwin/sys_time.h> 28*53ee8cc1Swenshuai.xi #endif /* __CYGWIN__ */ 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi #endif /* _WINSOCK_H */ 31*53ee8cc1Swenshuai.xi 32*53ee8cc1Swenshuai.xi #define ITIMER_REAL 0 33*53ee8cc1Swenshuai.xi #define ITIMER_VIRTUAL 1 34*53ee8cc1Swenshuai.xi #define ITIMER_PROF 2 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi struct itimerval { 37*53ee8cc1Swenshuai.xi struct timeval it_interval; 38*53ee8cc1Swenshuai.xi struct timeval it_value; 39*53ee8cc1Swenshuai.xi }; 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi /* BSD time macros used by RTEMS code */ 42*53ee8cc1Swenshuai.xi #if defined (__rtems__) || defined (__CYGWIN__) 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi /* Convenience macros for operations on timevals. 45*53ee8cc1Swenshuai.xi NOTE: `timercmp' does not work for >= or <=. */ 46*53ee8cc1Swenshuai.xi #define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) 47*53ee8cc1Swenshuai.xi #define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) 48*53ee8cc1Swenshuai.xi #define timercmp(a, b, CMP) \ 49*53ee8cc1Swenshuai.xi (((a)->tv_sec == (b)->tv_sec) ? \ 50*53ee8cc1Swenshuai.xi ((a)->tv_usec CMP (b)->tv_usec) : \ 51*53ee8cc1Swenshuai.xi ((a)->tv_sec CMP (b)->tv_sec)) 52*53ee8cc1Swenshuai.xi #define timeradd(a, b, result) \ 53*53ee8cc1Swenshuai.xi do { \ 54*53ee8cc1Swenshuai.xi (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ 55*53ee8cc1Swenshuai.xi (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \ 56*53ee8cc1Swenshuai.xi if ((result)->tv_usec >= 1000000) \ 57*53ee8cc1Swenshuai.xi { \ 58*53ee8cc1Swenshuai.xi ++(result)->tv_sec; \ 59*53ee8cc1Swenshuai.xi (result)->tv_usec -= 1000000; \ 60*53ee8cc1Swenshuai.xi } \ 61*53ee8cc1Swenshuai.xi } while (0) 62*53ee8cc1Swenshuai.xi #define timersub(a, b, result) \ 63*53ee8cc1Swenshuai.xi do { \ 64*53ee8cc1Swenshuai.xi (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 65*53ee8cc1Swenshuai.xi (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 66*53ee8cc1Swenshuai.xi if ((result)->tv_usec < 0) { \ 67*53ee8cc1Swenshuai.xi --(result)->tv_sec; \ 68*53ee8cc1Swenshuai.xi (result)->tv_usec += 1000000; \ 69*53ee8cc1Swenshuai.xi } \ 70*53ee8cc1Swenshuai.xi } while (0) 71*53ee8cc1Swenshuai.xi #endif /* defined (__rtems__) || defined (__CYGWIN__) */ 72*53ee8cc1Swenshuai.xi 73*53ee8cc1Swenshuai.xi int _EXFUN(gettimeofday, (struct timeval *__p, struct timezone *__z)); 74*53ee8cc1Swenshuai.xi int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *)); 75*53ee8cc1Swenshuai.xi int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp)); 76*53ee8cc1Swenshuai.xi int _EXFUN(getitimer, (int __which, struct itimerval *__value)); 77*53ee8cc1Swenshuai.xi int _EXFUN(setitimer, (int __which, const struct itimerval *__value, 78*53ee8cc1Swenshuai.xi struct itimerval *__ovalue)); 79*53ee8cc1Swenshuai.xi 80*53ee8cc1Swenshuai.xi #ifdef __cplusplus 81*53ee8cc1Swenshuai.xi } 82*53ee8cc1Swenshuai.xi #endif 83*53ee8cc1Swenshuai.xi #endif /* _SYS_TIME_H_ */ 84