1*a45ae5f8SJohn Marino /* Basic struct timeval utilities. 2*a45ae5f8SJohn Marino Copyright (C) 2011 Free Software Foundation, Inc. 3*a45ae5f8SJohn Marino 4*a45ae5f8SJohn Marino This file is part of the libiberty library. 5*a45ae5f8SJohn Marino Libiberty is free software; you can redistribute it and/or 6*a45ae5f8SJohn Marino modify it under the terms of the GNU Library General Public 7*a45ae5f8SJohn Marino License as published by the Free Software Foundation; either 8*a45ae5f8SJohn Marino version 2 of the License, or (at your option) any later version. 9*a45ae5f8SJohn Marino 10*a45ae5f8SJohn Marino Libiberty is distributed in the hope that it will be useful, 11*a45ae5f8SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of 12*a45ae5f8SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13*a45ae5f8SJohn Marino Library General Public License for more details. 14*a45ae5f8SJohn Marino 15*a45ae5f8SJohn Marino You should have received a copy of the GNU Library General Public 16*a45ae5f8SJohn Marino License along with libiberty; see the file COPYING.LIB. If not, 17*a45ae5f8SJohn Marino write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, 18*a45ae5f8SJohn Marino Boston, MA 02110-1301, USA. */ 19*a45ae5f8SJohn Marino 20*a45ae5f8SJohn Marino #include "config.h" 21*a45ae5f8SJohn Marino 22*a45ae5f8SJohn Marino /* On some systems (such as WindISS), you must include <sys/types.h> 23*a45ae5f8SJohn Marino to get the definition of "time_t" before you include <time.h>. */ 24*a45ae5f8SJohn Marino #include <sys/types.h> 25*a45ae5f8SJohn Marino 26*a45ae5f8SJohn Marino #ifdef TIME_WITH_SYS_TIME 27*a45ae5f8SJohn Marino # include <sys/time.h> 28*a45ae5f8SJohn Marino # include <time.h> 29*a45ae5f8SJohn Marino #else 30*a45ae5f8SJohn Marino # if HAVE_SYS_TIME_H 31*a45ae5f8SJohn Marino # include <sys/time.h> 32*a45ae5f8SJohn Marino # else 33*a45ae5f8SJohn Marino # ifdef HAVE_TIME_H 34*a45ae5f8SJohn Marino # include <time.h> 35*a45ae5f8SJohn Marino # endif 36*a45ae5f8SJohn Marino # endif 37*a45ae5f8SJohn Marino #endif 38*a45ae5f8SJohn Marino 39*a45ae5f8SJohn Marino #include "timeval-utils.h" 40*a45ae5f8SJohn Marino 41*a45ae5f8SJohn Marino /* 42*a45ae5f8SJohn Marino 43*a45ae5f8SJohn Marino @deftypefn Extension void timeval_add (struct timeval *@var{a}, @ 44*a45ae5f8SJohn Marino struct timeval *@var{b}, struct timeval *@var{result}) 45*a45ae5f8SJohn Marino 46*a45ae5f8SJohn Marino Adds @var{a} to @var{b} and stores the result in @var{result}. 47*a45ae5f8SJohn Marino 48*a45ae5f8SJohn Marino @end deftypefn 49*a45ae5f8SJohn Marino 50*a45ae5f8SJohn Marino */ 51*a45ae5f8SJohn Marino 52*a45ae5f8SJohn Marino void 53*a45ae5f8SJohn Marino timeval_add (struct timeval *result, 54*a45ae5f8SJohn Marino const struct timeval *a, const struct timeval *b) 55*a45ae5f8SJohn Marino { 56*a45ae5f8SJohn Marino result->tv_sec = a->tv_sec + b->tv_sec; 57*a45ae5f8SJohn Marino result->tv_usec = a->tv_usec + b->tv_usec; 58*a45ae5f8SJohn Marino if (result->tv_usec >= 1000000) 59*a45ae5f8SJohn Marino { 60*a45ae5f8SJohn Marino ++result->tv_sec; 61*a45ae5f8SJohn Marino result->tv_usec -= 1000000; 62*a45ae5f8SJohn Marino } 63*a45ae5f8SJohn Marino } 64*a45ae5f8SJohn Marino 65*a45ae5f8SJohn Marino /* 66*a45ae5f8SJohn Marino 67*a45ae5f8SJohn Marino @deftypefn Extension void timeval_sub (struct timeval *@var{a}, @ 68*a45ae5f8SJohn Marino struct timeval *@var{b}, struct timeval *@var{result}) 69*a45ae5f8SJohn Marino 70*a45ae5f8SJohn Marino Subtracts @var{b} from @var{a} and stores the result in @var{result}. 71*a45ae5f8SJohn Marino 72*a45ae5f8SJohn Marino @end deftypefn 73*a45ae5f8SJohn Marino 74*a45ae5f8SJohn Marino */ 75*a45ae5f8SJohn Marino 76*a45ae5f8SJohn Marino void 77*a45ae5f8SJohn Marino timeval_sub (struct timeval *result, 78*a45ae5f8SJohn Marino const struct timeval *a, const struct timeval *b) 79*a45ae5f8SJohn Marino { 80*a45ae5f8SJohn Marino result->tv_sec = a->tv_sec - b->tv_sec; 81*a45ae5f8SJohn Marino result->tv_usec = a->tv_usec - b->tv_usec; 82*a45ae5f8SJohn Marino if (result->tv_usec < 0) 83*a45ae5f8SJohn Marino { 84*a45ae5f8SJohn Marino --result->tv_sec; 85*a45ae5f8SJohn Marino result->tv_usec += 1000000; 86*a45ae5f8SJohn Marino } 87*a45ae5f8SJohn Marino } 88