diff options
author | Matt Caswell <matt@openssl.org> | 2015-05-25 23:57:41 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2015-05-26 10:38:56 +0100 |
commit | e40d7c1f3a31fa614760f7a9b75ae40ece5ff8bd (patch) | |
tree | 2d0c9cff3041ce0847b1a2691f12be5968989351 | |
parent | 3ae6186564c7820547319b8003a442b38f64835c (diff) |
Handle unsigned struct timeval members
The members of struct timeval on OpenVMS are unsigned. The logic for
calculating timeouts needs adjusting to deal with this.
RT#3862
Reviewed-by: Richard Levitte <levitte@openssl.org>
(cherry picked from commit fc52ac9028b9492fb086ba35a3352ea46e03ecfc)
-rw-r--r-- | crypto/bio/bss_dgram.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c index ac03a6d04d..dc4479f642 100644 --- a/crypto/bio/bss_dgram.c +++ b/crypto/bio/bss_dgram.c @@ -303,16 +303,17 @@ static void dgram_adjust_rcv_timeout(BIO *b) /* Calculate time left until timer expires */ memcpy(&timeleft, &(data->next_timeout), sizeof(struct timeval)); - timeleft.tv_sec -= timenow.tv_sec; - timeleft.tv_usec -= timenow.tv_usec; - if (timeleft.tv_usec < 0) { + if (timeleft.tv_usec < timenow.tv_usec) { + timeleft.tv_usec = 1000000 - timenow.tv_usec + timeleft.tv_usec; timeleft.tv_sec--; - timeleft.tv_usec += 1000000; + } else { + timeleft.tv_usec -= timenow.tv_usec; } - - if (timeleft.tv_sec < 0) { + if (timeleft.tv_sec < timenow.tv_sec) { timeleft.tv_sec = 0; timeleft.tv_usec = 1; + } else { + timeleft.tv_sec -= timenow.tv_sec; } /* |