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