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 2006/07/27 18:12:10 martinea Exp $
38 static int clock_running = 0;
41 clock_is_running(void)
51 g_get_current_time(&start_time);
71 g_fprintf(stderr,_("curclock botch\n"));
75 g_get_current_time(&end_time);
76 return timesub(end_time,start_time);
83 static char str[10][NUM_STR_SIZE+10];
87 /* tv_sec/tv_usec are longs on some systems */
88 g_snprintf(str[n], SIZEOF(str[n]), "%lu.%03lu",
89 (unsigned long)t.tv_sec,
90 (unsigned long)t.tv_usec/1000);
96 GTimeVal timesub(GTimeVal end, GTimeVal start) {
99 if(end.tv_usec < start.tv_usec) { /* borrow 1 sec */
102 end.tv_usec += 1000000;
104 diff.tv_usec = end.tv_usec - start.tv_usec;
106 if (end.tv_sec > start.tv_sec)
107 diff.tv_sec = end.tv_sec - start.tv_sec;
114 GTimeVal timeadd(GTimeVal a, GTimeVal b) {
117 sum.tv_sec = a.tv_sec + b.tv_sec;
118 sum.tv_usec = a.tv_usec + b.tv_usec;
120 if(sum.tv_usec >= 1000000) {
121 sum.tv_usec -= 1000000;
127 double g_timeval_to_double(GTimeVal v) {
128 return v.tv_sec + ((double)v.tv_usec) / G_USEC_PER_SEC;
131 void amanda_gettimeofday(struct timeval * timeval_time) {
132 GTimeVal gtimeval_time;
134 g_get_current_time(>imeval_time);
135 timeval_time->tv_sec = gtimeval_time.tv_sec;
136 timeval_time->tv_usec = gtimeval_time.tv_usec;