xref: /netbsd-src/external/gpl3/gcc/dist/libiberty/timeval-utils.c (revision b1e838363e3c6fc78a55519254d99869742dd33c)
148fb7bfaSmrg /* Basic struct timeval utilities.
2*b1e83836Smrg    Copyright (C) 2011-2022 Free Software Foundation, Inc.
348fb7bfaSmrg 
448fb7bfaSmrg This file is part of the libiberty library.
548fb7bfaSmrg Libiberty is free software; you can redistribute it and/or
648fb7bfaSmrg modify it under the terms of the GNU Library General Public
748fb7bfaSmrg License as published by the Free Software Foundation; either
848fb7bfaSmrg version 2 of the License, or (at your option) any later version.
948fb7bfaSmrg 
1048fb7bfaSmrg Libiberty is distributed in the hope that it will be useful,
1148fb7bfaSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of
1248fb7bfaSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1348fb7bfaSmrg Library General Public License for more details.
1448fb7bfaSmrg 
1548fb7bfaSmrg You should have received a copy of the GNU Library General Public
1648fb7bfaSmrg License along with libiberty; see the file COPYING.LIB.  If not,
1748fb7bfaSmrg write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
1848fb7bfaSmrg Boston, MA 02110-1301, USA.  */
1948fb7bfaSmrg 
2048fb7bfaSmrg #include "config.h"
2148fb7bfaSmrg 
2248fb7bfaSmrg /* On some systems (such as WindISS), you must include <sys/types.h>
2348fb7bfaSmrg    to get the definition of "time_t" before you include <time.h>.  */
2448fb7bfaSmrg #include <sys/types.h>
2548fb7bfaSmrg 
2648fb7bfaSmrg #ifdef TIME_WITH_SYS_TIME
2748fb7bfaSmrg # include <sys/time.h>
2848fb7bfaSmrg # include <time.h>
2948fb7bfaSmrg #else
3048fb7bfaSmrg # if HAVE_SYS_TIME_H
3148fb7bfaSmrg #  include <sys/time.h>
3248fb7bfaSmrg # else
3348fb7bfaSmrg #  ifdef HAVE_TIME_H
3448fb7bfaSmrg #   include <time.h>
3548fb7bfaSmrg #  endif
3648fb7bfaSmrg # endif
3748fb7bfaSmrg #endif
3848fb7bfaSmrg 
3948fb7bfaSmrg #include "timeval-utils.h"
4048fb7bfaSmrg 
4148fb7bfaSmrg /*
4248fb7bfaSmrg 
4348fb7bfaSmrg @deftypefn Extension void timeval_add (struct timeval *@var{a}, @
4448fb7bfaSmrg   struct timeval *@var{b}, struct timeval *@var{result})
4548fb7bfaSmrg 
4648fb7bfaSmrg Adds @var{a} to @var{b} and stores the result in @var{result}.
4748fb7bfaSmrg 
4848fb7bfaSmrg @end deftypefn
4948fb7bfaSmrg 
5048fb7bfaSmrg */
5148fb7bfaSmrg 
5248fb7bfaSmrg void
timeval_add(struct timeval * result,const struct timeval * a,const struct timeval * b)5348fb7bfaSmrg timeval_add (struct timeval *result,
5448fb7bfaSmrg 	     const struct timeval *a, const struct timeval *b)
5548fb7bfaSmrg {
5648fb7bfaSmrg   result->tv_sec = a->tv_sec + b->tv_sec;
5748fb7bfaSmrg   result->tv_usec = a->tv_usec + b->tv_usec;
5848fb7bfaSmrg   if (result->tv_usec >= 1000000)
5948fb7bfaSmrg     {
6048fb7bfaSmrg       ++result->tv_sec;
6148fb7bfaSmrg       result->tv_usec -= 1000000;
6248fb7bfaSmrg     }
6348fb7bfaSmrg }
6448fb7bfaSmrg 
6548fb7bfaSmrg /*
6648fb7bfaSmrg 
6748fb7bfaSmrg @deftypefn Extension void timeval_sub (struct timeval *@var{a}, @
6848fb7bfaSmrg   struct timeval *@var{b}, struct timeval *@var{result})
6948fb7bfaSmrg 
7048fb7bfaSmrg Subtracts @var{b} from @var{a} and stores the result in @var{result}.
7148fb7bfaSmrg 
7248fb7bfaSmrg @end deftypefn
7348fb7bfaSmrg 
7448fb7bfaSmrg */
7548fb7bfaSmrg 
7648fb7bfaSmrg void
timeval_sub(struct timeval * result,const struct timeval * a,const struct timeval * b)7748fb7bfaSmrg timeval_sub (struct timeval *result,
7848fb7bfaSmrg 	     const struct timeval *a, const struct timeval *b)
7948fb7bfaSmrg {
8048fb7bfaSmrg   result->tv_sec = a->tv_sec - b->tv_sec;
8148fb7bfaSmrg   result->tv_usec = a->tv_usec - b->tv_usec;
8248fb7bfaSmrg   if (result->tv_usec < 0)
8348fb7bfaSmrg     {
8448fb7bfaSmrg       --result->tv_sec;
8548fb7bfaSmrg       result->tv_usec += 1000000;
8648fb7bfaSmrg     }
8748fb7bfaSmrg }
88