summaryrefslogtreecommitdiff
path: root/include/sys/time.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/sys/time.h')
-rw-r--r--include/sys/time.h204
1 files changed, 134 insertions, 70 deletions
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 <features.h>
-#include <linux/types.h>
-#include <linux/time.h>
-
-#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 <time.h>
-#include <sys/types.h>
+#include <sys/select.h>
+
+#define __need_timeval
+#include <bits/time.h>
+
__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 <time.h> 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 */