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.7.2.1 2007/02/06 12:44:03 martinea Exp $
37 static struct timeval timesub(struct timeval end, struct timeval start);
38 static struct timeval timeadd(struct timeval a, struct timeval b);
42 static int clock_running = 0;
45 clock_is_running(void)
53 amanda_timezone dontcare;
56 amanda_gettimeofday(&start_time.r, &dontcare);
63 struct timeval end_time;
64 amanda_timezone dontcare;
67 fprintf(stderr,"stopclock botch\n");
70 amanda_gettimeofday(&end_time, &dontcare);
71 diff.r = timesub(end_time,start_time.r);
80 struct timeval end_time;
81 amanda_timezone dontcare;
84 fprintf(stderr,"curclock botch\n");
87 amanda_gettimeofday(&end_time, &dontcare);
88 diff.r = timesub(end_time,start_time.r);
99 sum.r = timeadd(a.r,b.r);
110 dif.r = timesub(a.r,b.r);
118 static char str[10][NUM_STR_SIZE+10];
122 /* tv_sec/tv_usec are longs on some systems */
123 snprintf(str[n], SIZEOF(str[n]), "rtime %lu.%03lu",
124 (unsigned long)t.r.tv_sec,
125 (unsigned long)t.r.tv_usec / 1000);
127 n %= am_countof(str);
135 static char str[10][NUM_STR_SIZE+10];
139 /* tv_sec/tv_usec are longs on some systems */
140 snprintf(str[n], SIZEOF(str[n]), "%lu.%03lu",
141 (unsigned long)t.r.tv_sec,
142 (unsigned long)t.r.tv_usec/1000);
144 n %= am_countof(str);
148 static struct timeval
151 struct timeval start)
155 if(end.tv_usec < start.tv_usec) { /* borrow 1 sec */
158 end.tv_usec += 1000000;
160 diff.tv_usec = end.tv_usec - start.tv_usec;
162 if (end.tv_sec > start.tv_sec)
163 diff.tv_sec = end.tv_sec - start.tv_sec;
170 static struct timeval
177 sum.tv_sec = a.tv_sec + b.tv_sec;
178 sum.tv_usec = a.tv_usec + b.tv_usec;
180 if(sum.tv_usec >= 1000000) {
181 sum.tv_usec -= 1000000;