From ffb96c090015f49059d146deefbbd7e1f6baa642 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 6 Jul 2000 19:22:49 +0000 Subject: Some more major updates to further superate ucLibc from the kernel headers (the way it has been done in GNU libc). -Erik --- include/sys/time.h | 204 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 134 insertions(+), 70 deletions(-) (limited to 'include/sys/time.h') diff --git a/include/sys/time.h b/include/sys/time.h index 98e51c07c..83be23fb4 100644 --- a/include/sys/time.h +++ b/include/sys/time.h @@ -1,81 +1,145 @@ +/* Copyright (C) 1991, 92, 93, 94, 96, 97, 98 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + #ifndef _SYS_TIME_H -#define _SYS_TIME_H +#define _SYS_TIME_H 1 #include -#include -#include - -#define DST_NONE 0 /* not on dst */ -#define DST_USA 1 /* USA style dst */ -#define DST_AUST 2 /* Australian style dst */ -#define DST_WET 3 /* Western European dst */ -#define DST_MET 4 /* Middle European dst */ -#define DST_EET 5 /* Eastern European dst */ -#define DST_CAN 6 /* Canada */ -#define DST_GB 7 /* Great Britain and Eire */ -#define DST_RUM 8 /* Rumania */ -#define DST_TUR 9 /* Turkey */ -#define DST_AUSTALT 10 /* Australian style with shift in 1986 */ - -#ifdef __SVR4_I386_ABI_L1__ -typedef struct timestruc { - time_t tv_sec; - long tv_nsec; -} timestruc_t; -#endif /* __SVR4_I386_ABI_L1__ */ - -/* - * Operations on timevals. - * - * NB: timercmp does not work for >= or <=. - * - */ -#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) -#define timercmp(tvp, uvp, cmp) \ - (((tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) \ - || (tvp)->tv_sec cmp (uvp)->tv_sec) -#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) #include -#include +#include + +#define __need_timeval +#include + __BEGIN_DECLS -extern int __gettimeofday __P ((struct timeval * __tp, - struct timezone * __tz)); -extern int gettimeofday __P ((struct timeval * __tp, - struct timezone * __tz)); -extern int __settimeofday __P ((__const struct timeval *__tv, - __const struct timezone *__tz)); -extern int settimeofday __P ((__const struct timeval *__tv, - __const struct timezone *__tz)); - -extern int __select __P ((int __width, fd_set * __readfds, - fd_set * __writefds, fd_set * __exceptfds, - struct timeval * __timeout)); -extern int select __P ((int __width, fd_set * __readfds, - fd_set * __writefds, fd_set * __exceptfds, - struct timeval * __timeout)); - -extern int __getitimer __P ((int __which, - struct itimerval *__value)); -extern int getitimer __P ((int __which, - struct itimerval *__value)); -extern int __setitimer __P ((int __which, - __const struct itimerval *__value, - struct itimerval *__ovalue)); -extern int setitimer __P ((int __which, - __const struct itimerval *__value, - struct itimerval *__ovalue)); - -extern int __adjtime __P ((struct timeval * __itv, - struct timeval * __otv)); -extern int adjtime __P ((struct timeval * __itv, - struct timeval * __otv)); - -extern int __utimes __P((char *__path, struct timeval *tvp)); -extern int utimes __P((char *__path, struct timeval *tvp)); +/* Macros for converting between `struct timeval' and `struct timespec'. */ +#define TIMEVAL_TO_TIMESPEC(tv, ts) { \ + (ts)->tv_sec = (tv)->tv_sec; \ + (ts)->tv_nsec = (tv)->tv_usec * 1000; \ +} +#define TIMESPEC_TO_TIMEVAL(tv, ts) { \ + (tv)->tv_sec = (ts)->tv_sec; \ + (tv)->tv_usec = (ts)->tv_nsec / 1000; \ +} + + +/* Structure crudely representing a timezone. + This is obsolete and should never be used. */ +struct timezone + { + int tz_minuteswest; /* Minutes west of GMT. */ + int tz_dsttime; /* Nonzero if DST is ever in effect. */ + }; + +/* Get the current time of day and timezone information, + putting it into *TV and *TZ. If TZ is NULL, *TZ is not filled. + Returns 0 on success, -1 on errors. + NOTE: This form of timezone information is obsolete. + Use the functions and variables declared in instead. */ +extern int gettimeofday __P ((struct timeval *__tv, + struct timezone *__tz)); + +/* Set the current time of day and timezone information. + This call is restricted to the super-user. */ +extern int settimeofday __P ((__const struct timeval *__tv, + __const struct timezone *__tz)); + +/* Adjust the current time of day by the amount in DELTA. + If OLDDELTA is not NULL, it is filled in with the amount + of time adjustment remaining to be done from the last `adjtime' call. + This call is restricted to the super-user. */ +extern int adjtime __P ((__const struct timeval *__delta, + struct timeval *__olddelta)); + + +/* Values for the first argument to `getitimer' and `setitimer'. */ +enum __itimer_which + { + /* Timers run in real time. */ + ITIMER_REAL = 0, +#define ITIMER_REAL ITIMER_REAL + /* Timers run only when the process is executing. */ + ITIMER_VIRTUAL = 1, +#define ITIMER_VIRTUAL ITIMER_VIRTUAL + /* Timers run when the process is executing and when + the system is executing on behalf of the process. */ + ITIMER_PROF = 2 +#define ITIMER_PROF ITIMER_PROF + }; + +/* Type of the second argument to `getitimer' and + the second and third arguments `setitimer'. */ +struct itimerval + { + /* Value to put into `it_value' when the timer expires. */ + struct timeval it_interval; + /* Time to the next timer expiration. */ + struct timeval it_value; + }; + +/* Set *VALUE to the current setting of timer WHICH. + Return 0 on success, -1 on errors. */ +extern int getitimer __P ((enum __itimer_which __which, + struct itimerval *__value)); + +/* Set the timer WHICH to *NEW. If OLD is not NULL, + set *OLD to the old value of timer WHICH. + Returns 0 on success, -1 on errors. */ +extern int setitimer __P ((enum __itimer_which __which, + __const struct itimerval *__new, + struct itimerval *__old)); + +/* Change the access time of FILE to TVP[0] and + the modification time of FILE to TVP[1]. */ +extern int utimes __P ((__const char *__file, struct timeval __tvp[2])); + + +/* Convenience macros for operations on timevals. + NOTE: `timercmp' does not work for >= or <=. */ +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0) +#define timercmp(a, b, CMP) \ + (((a)->tv_sec == (b)->tv_sec) ? \ + ((a)->tv_usec CMP (b)->tv_usec) : \ + ((a)->tv_sec CMP (b)->tv_sec)) +#define timeradd(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \ + if ((result)->tv_usec >= 1000000) \ + { \ + ++(result)->tv_sec; \ + (result)->tv_usec -= 1000000; \ + } \ + } while (0) +#define timersub(a, b, result) \ + do { \ + (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ + (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ + if ((result)->tv_usec < 0) { \ + --(result)->tv_sec; \ + (result)->tv_usec += 1000000; \ + } \ + } while (0) __END_DECLS -#endif /*_SYS_TIME_H*/ +#endif /* sys/time.h */ -- cgit v1.2.3