Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*-
  2.  * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  *
  14.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  15.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  18.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  19.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  20.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  21.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  22.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  23.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  24.  * SUCH DAMAGE.
  25.  *
  26.  * $FreeBSD$
  27.  */
  28.  
  29. #ifndef _SYS__TIMEVAL_H_
  30. #define _SYS__TIMEVAL_H_
  31.  
  32. #include <machine/types.h>
  33.  
  34. #ifndef _SUSECONDS_T_DECLARED
  35. typedef __suseconds_t   suseconds_t;
  36. #define _SUSECONDS_T_DECLARED
  37. #endif
  38.  
  39. #ifndef __time_t_defined
  40. typedef _TIME_T_        time_t;
  41. #define __time_t_defined
  42. #endif
  43.  
  44. /* This define is also used outside of Newlib, e.g. in MinGW-w64 */
  45. #ifndef _TIMEVAL_DEFINED
  46. #define _TIMEVAL_DEFINED
  47.  
  48. /*
  49.  * Structure returned by gettimeofday(2) system call, and used in other calls.
  50.  */
  51. struct timeval {
  52.         time_t          tv_sec;         /* seconds */
  53.         suseconds_t     tv_usec;        /* and microseconds */
  54. };
  55.  
  56. #if __BSD_VISIBLE
  57. #ifndef _KERNEL                 /* NetBSD/OpenBSD compatible interfaces */
  58.  
  59. #define timerclear(tvp)         ((tvp)->tv_sec = (tvp)->tv_usec = 0)
  60. #define timerisset(tvp)         ((tvp)->tv_sec || (tvp)->tv_usec)
  61. #define timercmp(tvp, uvp, cmp)                                 \
  62.         (((tvp)->tv_sec == (uvp)->tv_sec) ?                             \
  63.             ((tvp)->tv_usec cmp (uvp)->tv_usec) :                       \
  64.             ((tvp)->tv_sec cmp (uvp)->tv_sec))
  65. #define timeradd(tvp, uvp, vvp)                                         \
  66.         do {                                                            \
  67.                 (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;          \
  68.                 (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;       \
  69.                 if ((vvp)->tv_usec >= 1000000) {                        \
  70.                         (vvp)->tv_sec++;                                \
  71.                         (vvp)->tv_usec -= 1000000;                      \
  72.                 }                                                       \
  73.         } while (0)
  74. #define timersub(tvp, uvp, vvp)                                         \
  75.         do {                                                            \
  76.                 (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;          \
  77.                 (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;       \
  78.                 if ((vvp)->tv_usec < 0) {                               \
  79.                         (vvp)->tv_sec--;                                \
  80.                         (vvp)->tv_usec += 1000000;                      \
  81.                 }                                                       \
  82.         } while (0)
  83. #endif
  84. #endif /* __BSD_VISIBLE */
  85.  
  86. #endif /* _TIMEVAL_DEFINED */
  87.  
  88. #endif /* !_SYS__TIMEVAL_H_ */
  89.