OpenWatcom: time_t is unsigned, change math using time_t to promote to a 64bit signed integer

pull/624/head
Brad House 1 year ago
parent b7e5182899
commit 278a0b59b9
  1. 8
      src/lib/ares_private.h
  2. 5
      src/lib/ares_process.c
  3. 10
      src/lib/ares_rand.c
  4. 15
      src/lib/ares_timeout.c

@ -558,4 +558,12 @@ size_t ares__count_digits(size_t n);
size_t ares__count_hexdigits(size_t n); size_t ares__count_hexdigits(size_t n);
# ifdef _MSC_VER
typedef __int64 ares_int64_t;
typedef unsigned __int64 ares_uint64_t;
# else
typedef long long ares_int64_t;
typedef unsigned long long ares_uint64_t;
# endif
#endif /* __ARES_PRIVATE_H */ #endif /* __ARES_PRIVATE_H */

@ -106,7 +106,7 @@ static void server_set_good(struct server_state *server)
ares_bool_t ares__timedout(const struct timeval *now, ares_bool_t ares__timedout(const struct timeval *now,
const struct timeval *check) const struct timeval *check)
{ {
time_t secs = (now->tv_sec - check->tv_sec); ares_int64_t secs = ((ares_int64_t)now->tv_sec - (ares_int64_t)check->tv_sec);
if (secs > 0) { if (secs > 0) {
return ARES_TRUE; /* yes, timed out */ return ARES_TRUE; /* yes, timed out */
@ -116,7 +116,8 @@ ares_bool_t ares__timedout(const struct timeval *now,
} }
/* if the full seconds were identical, check the sub second parts */ /* if the full seconds were identical, check the sub second parts */
return (now->tv_usec - check->tv_usec) >= 0 ? ARES_TRUE : ARES_FALSE; return ((ares_int64_t)now->tv_usec - (ares_int64_t)check->tv_usec) >= 0 ?
ARES_TRUE : ARES_FALSE;
} }
/* add the specific number of milliseconds to the time in the first argument */ /* add the specific number of milliseconds to the time in the first argument */

@ -54,18 +54,12 @@ typedef struct ares_rand_rc4 {
} ares_rand_rc4; } ares_rand_rc4;
# ifdef _MSC_VER
typedef unsigned __int64 cares_u64;
# else
typedef unsigned long long cares_u64;
# endif
static unsigned int ares_u32_from_ptr(void *addr) static unsigned int ares_u32_from_ptr(void *addr)
{ {
if (sizeof(void *) == 8) { if (sizeof(void *) == 8) {
return (unsigned int)((((cares_u64)addr >> 32) & 0xFFFFFFFF) | return (unsigned int)((((ares_uint64_t)addr >> 32) & 0xFFFFFFFF) |
((cares_u64)addr & 0xFFFFFFFF)); ((ares_uint64_t)addr & 0xFFFFFFFF));
} }
return (unsigned int)((size_t)addr & 0xFFFFFFFF); return (unsigned int)((size_t)addr & 0xFFFFFFFF);
} }

@ -35,10 +35,11 @@
#include "ares_private.h" #include "ares_private.h"
/* return time offset between now and (future) check, in milliseconds */ /* return time offset between now and (future) check, in milliseconds */
static long timeoffset(const struct timeval *now, const struct timeval *check) static ares_int64_t timeoffset(const struct timeval *now,
const struct timeval *check)
{ {
return (check->tv_sec - now->tv_sec) * 1000 + return ((ares_int64_t)check->tv_sec - (ares_int64_t)now->tv_sec) * 1000 +
(check->tv_usec - now->tv_usec) / 1000; ((ares_int64_t)check->tv_usec - (ares_int64_t)now->tv_usec) / 1000;
} }
struct timeval *ares_timeout(ares_channel_t *channel, struct timeval *maxtv, struct timeval *ares_timeout(ares_channel_t *channel, struct timeval *maxtv,
@ -47,7 +48,7 @@ struct timeval *ares_timeout(ares_channel_t *channel, struct timeval *maxtv,
const struct query *query; const struct query *query;
ares__slist_node_t *node; ares__slist_node_t *node;
struct timeval now; struct timeval now;
long offset; ares_int64_t offset;
/* The minimum timeout of all queries is always the first entry in /* The minimum timeout of all queries is always the first entry in
* channel->queries_by_timeout */ * channel->queries_by_timeout */
@ -65,12 +66,12 @@ struct timeval *ares_timeout(ares_channel_t *channel, struct timeval *maxtv,
if (offset < 0) { if (offset < 0) {
offset = 0; offset = 0;
} }
if (offset > (long)INT_MAX) { if (offset > INT_MAX) {
offset = INT_MAX; offset = INT_MAX;
} }
tvbuf->tv_sec = offset / 1000; tvbuf->tv_sec = (time_t)(offset / 1000);
tvbuf->tv_usec = (offset % 1000) * 1000; tvbuf->tv_usec = (int)((offset % 1000) * 1000);
if (maxtv == NULL) { if (maxtv == NULL) {
return tvbuf; return tvbuf;

Loading…
Cancel
Save