]> icculus.org git repositories - icculus/iodoom3.git/blob - neo/curl/lib/timeval.c
hello world
[icculus/iodoom3.git] / neo / curl / lib / timeval.c
1 /***************************************************************************
2  *                                  _   _ ____  _
3  *  Project                     ___| | | |  _ \| |
4  *                             / __| | | | |_) | |
5  *                            | (__| |_| |  _ <| |___
6  *                             \___|\___/|_| \_\_____|
7  *
8  * Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
9  *
10  * This software is licensed as described in the file COPYING, which
11  * you should have received as part of this distribution. The terms
12  * are also available at http://curl.haxx.se/docs/copyright.html.
13  *
14  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15  * copies of the Software, and permit persons to whom the Software is
16  * furnished to do so, under the terms of the COPYING file.
17  *
18  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19  * KIND, either express or implied.
20  *
21  * $Id: timeval.c,v 1.20 2004/03/11 13:13:35 bagder Exp $
22  ***************************************************************************/
23
24 #include "timeval.h"
25
26 #ifndef HAVE_GETTIMEOFDAY
27
28 #ifdef WIN32
29 #include <mmsystem.h>
30
31 static int gettimeofday(struct timeval *tp, void *nothing)
32 {
33 #ifdef WITHOUT_MM_LIB
34   SYSTEMTIME st;
35   time_t tt;
36   struct tm tmtm;
37   /* mktime converts local to UTC */
38   GetLocalTime (&st);
39   tmtm.tm_sec = st.wSecond;
40   tmtm.tm_min = st.wMinute;
41   tmtm.tm_hour = st.wHour;
42   tmtm.tm_mday = st.wDay;
43   tmtm.tm_mon = st.wMonth - 1;
44   tmtm.tm_year = st.wYear - 1900;
45   tmtm.tm_isdst = -1;
46   tt = mktime (&tmtm);
47   tp->tv_sec = tt;
48   tp->tv_usec = st.wMilliseconds * 1000;
49 #else
50   /**
51    ** The earlier time calculations using GetLocalTime
52    ** had a time resolution of 10ms.The timeGetTime, part
53    ** of multimedia apis offer a better time resolution
54    ** of 1ms.Need to link against winmm.lib for this
55    **/
56   unsigned long Ticks = 0;
57   unsigned long Sec =0;
58   unsigned long Usec = 0;
59   Ticks = timeGetTime();
60
61   Sec = Ticks/1000;
62   Usec = (Ticks - (Sec*1000))*1000;
63   tp->tv_sec = Sec;
64   tp->tv_usec = Usec;
65 #endif /* WITHOUT_MM_LIB */
66   (void)nothing;
67   return 0;
68 }
69 #else /* WIN32 */
70 /* non-win32 version of Curl_gettimeofday() */
71 static int gettimeofday(struct timeval *tp, void *nothing)
72 {
73   (void)nothing; /* we don't support specific time-zones */
74   tp->tv_sec = (long)time(NULL);
75   tp->tv_usec = 0;
76   return 0;
77 }
78 #endif /* WIN32 */
79 #endif /* HAVE_GETTIMEOFDAY */
80
81 struct timeval Curl_tvnow (void)
82 {
83   struct timeval now;
84   (void)gettimeofday(&now, NULL);
85   return now;
86 }
87
88 /*
89  * Make sure that the first argument is the more recent time, as otherwise
90  * we'll get a weird negative time-diff back...
91  */
92 long Curl_tvdiff (struct timeval newer, struct timeval older)
93 {
94   return (newer.tv_sec-older.tv_sec)*1000+
95     (499+newer.tv_usec-older.tv_usec)/1000;
96 }
97
98 long Curl_tvlong (struct timeval t1)
99 {
100   return t1.tv_sec;
101 }