2 * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3 * Copyright (c) 1991-1998 University of Maryland at College Park
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation, and that the name of U.M. not be used in advertising or
11 * publicity pertaining to distribution of the software without specific,
12 * written prior permission. U.M. makes no representations about the
13 * suitability of this software for any purpose. It is provided "as is"
14 * without express or implied warranty.
16 * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
18 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Author: James da Silva, Systems Design and Analysis Group
24 * Computer Science Department
25 * University of Maryland at College Park
28 * $Id: clock.c,v 1.5 2002/04/08 00:16:18 jrjackson Exp $
37 static struct timeval timesub P((struct timeval end, struct timeval start));
38 static struct timeval timeadd P((struct timeval a, struct timeval b));
40 times_t times_zero = {{0,0}};
42 static int clock_running = 0;
44 int clock_is_running()
51 amanda_timezone dontcare;
54 amanda_gettimeofday(&start_time.r, &dontcare);
60 struct timeval end_time;
61 amanda_timezone dontcare;
64 fprintf(stderr,"stopclock botch\n");
67 amanda_gettimeofday(&end_time, &dontcare);
68 diff.r = timesub(end_time,start_time.r);
76 struct timeval end_time;
77 amanda_timezone dontcare;
80 fprintf(stderr,"curclock botch\n");
83 amanda_gettimeofday(&end_time, &dontcare);
84 diff.r = timesub(end_time,start_time.r);
93 sum.r = timeadd(a.r,b.r);
102 dif.r = timesub(a.r,b.r);
109 static char str[10][NUM_STR_SIZE+10];
113 /* tv_sec/tv_usec are longs on some systems */
114 snprintf(str[n], sizeof(str[n]),
115 "rtime %d.%03d", (int)t.r.tv_sec, (int)t.r.tv_usec/1000);
117 n %= am_countof(str);
121 char *walltime_str(t)
124 static char str[10][NUM_STR_SIZE+10];
128 /* tv_sec/tv_usec are longs on some systems */
129 snprintf(str[n], sizeof(str[n]),
130 "%d.%03d", (int)t.r.tv_sec, (int)t.r.tv_usec/1000);
132 n %= am_countof(str);
136 static struct timeval timesub(end,start)
137 struct timeval end,start;
141 if(end.tv_usec < start.tv_usec) { /* borrow 1 sec */
143 end.tv_usec += 1000000;
145 diff.tv_usec = end.tv_usec - start.tv_usec;
146 diff.tv_sec = end.tv_sec - start.tv_sec;
150 static struct timeval timeadd(a,b)
155 sum.tv_sec = a.tv_sec + b.tv_sec;
156 sum.tv_usec = a.tv_usec + b.tv_usec;
158 if(sum.tv_usec >= 1000000) {
159 sum.tv_usec -= 1000000;