mirror of
https://frontier.innolan.net/rainlance/c-ares.git
synced 2025-10-05 22:19:38 +00:00
Add comments for the benefit of the lcov tool, marking lines that cannot be hit. Typically these are fall-back protection arms that are already covered by earlier checks, and so it's not worth taking out the unhittable code (in case someone changes the code between the two places in future).
112 lines
3.0 KiB
C
112 lines
3.0 KiB
C
|
|
/* Copyright (C) 2008 by Daniel Stenberg et al
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software and its
|
|
* documentation for any purpose and without fee is hereby granted, provided
|
|
* that the above copyright notice appear in all copies and that both that
|
|
* copyright notice and this permission notice appear in supporting
|
|
* documentation, and that the name of M.I.T. not be used in advertising or
|
|
* publicity pertaining to distribution of the software without specific,
|
|
* written prior permission. M.I.T. makes no representations about the
|
|
* suitability of this software for any purpose. It is provided "as is"
|
|
* without express or implied warranty.
|
|
*/
|
|
|
|
#include "ares_setup.h"
|
|
#include "ares.h"
|
|
#include "ares_private.h"
|
|
|
|
#if defined(WIN32) && !defined(MSDOS)
|
|
|
|
struct timeval ares__tvnow(void)
|
|
{
|
|
/*
|
|
** GetTickCount() is available on _all_ Windows versions from W95 up
|
|
** to nowadays. Returns milliseconds elapsed since last system boot,
|
|
** increases monotonically and wraps once 49.7 days have elapsed.
|
|
*/
|
|
struct timeval now;
|
|
DWORD milliseconds = GetTickCount();
|
|
now.tv_sec = milliseconds / 1000;
|
|
now.tv_usec = (milliseconds % 1000) * 1000;
|
|
return now;
|
|
}
|
|
|
|
#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
|
|
|
|
struct timeval ares__tvnow(void)
|
|
{
|
|
/*
|
|
** clock_gettime() is granted to be increased monotonically when the
|
|
** monotonic clock is queried. Time starting point is unspecified, it
|
|
** could be the system start-up time, the Epoch, or something else,
|
|
** in any case the time starting point does not change once that the
|
|
** system has started up.
|
|
*/
|
|
struct timeval now;
|
|
struct timespec tsnow;
|
|
if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
|
|
now.tv_sec = tsnow.tv_sec;
|
|
now.tv_usec = tsnow.tv_nsec / 1000;
|
|
}
|
|
/*
|
|
** Even when the configure process has truly detected monotonic clock
|
|
** availability, it might happen that it is not actually available at
|
|
** run-time. When this occurs simply fallback to other time source.
|
|
*/
|
|
#ifdef HAVE_GETTIMEOFDAY
|
|
else
|
|
(void)gettimeofday(&now, NULL); /* LCOV_EXCL_LINE */
|
|
#else
|
|
else {
|
|
now.tv_sec = (long)time(NULL);
|
|
now.tv_usec = 0;
|
|
}
|
|
#endif
|
|
return now;
|
|
}
|
|
|
|
#elif defined(HAVE_GETTIMEOFDAY)
|
|
|
|
struct timeval ares__tvnow(void)
|
|
{
|
|
/*
|
|
** gettimeofday() is not granted to be increased monotonically, due to
|
|
** clock drifting and external source time synchronization it can jump
|
|
** forward or backward in time.
|
|
*/
|
|
struct timeval now;
|
|
(void)gettimeofday(&now, NULL);
|
|
return now;
|
|
}
|
|
|
|
#else
|
|
|
|
struct timeval ares__tvnow(void)
|
|
{
|
|
/*
|
|
** time() returns the value of time in seconds since the Epoch.
|
|
*/
|
|
struct timeval now;
|
|
now.tv_sec = (long)time(NULL);
|
|
now.tv_usec = 0;
|
|
return now;
|
|
}
|
|
|
|
#endif
|
|
|
|
#if 0 /* Not used */
|
|
/*
|
|
* Make sure that the first argument is the more recent time, as otherwise
|
|
* we'll get a weird negative time-diff back...
|
|
*
|
|
* Returns: the time difference in number of milliseconds.
|
|
*/
|
|
long ares__tvdiff(struct timeval newer, struct timeval older)
|
|
{
|
|
return (newer.tv_sec-older.tv_sec)*1000+
|
|
(newer.tv_usec-older.tv_usec)/1000;
|
|
}
|
|
#endif
|
|
|