diff options
author | Stijn Tintel <stijn@linux-ipv6.be> | 2021-11-04 12:14:02 +0200 |
---|---|---|
committer | Stijn Tintel <stijn@linux-ipv6.be> | 2021-11-04 13:03:25 +0200 |
commit | 123e976f3d012b310ac223a54b7ef5213107e33d (patch) | |
tree | 29efd101d31d8bd8930482e5130d8f6bcc9b3636 | |
parent | be3dc7223a6d75587e26f8b8d6d56920841e44b6 (diff) | |
download | libubox-123e976f3d012b310ac223a54b7ef5213107e33d.tar.gz |
uloop: restore return type of uloop_timeout_remaining
The uloop_timeout_remaining function is public and changing its return
type breaks ABI. Change the return type back to int, and return INT_MIN
or INT_MAX if the value returned by tv_diff would overflow integer.
Fixes: be3dc7223a6d ("uloop: avoid integer overflow in tv_diff")
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Acked-by: Jo-Philipp Wich <jo@mein.io>
Acked-by: John Crispin <john@phrozen.org>
-rw-r--r-- | uloop.c | 13 | ||||
-rw-r--r-- | uloop.h | 2 |
2 files changed, 12 insertions, 3 deletions
@@ -26,6 +26,7 @@ #include <string.h> #include <fcntl.h> #include <stdbool.h> +#include <limits.h> #include "uloop.h" #include "utils.h" @@ -317,8 +318,9 @@ int uloop_timeout_cancel(struct uloop_timeout *timeout) return 0; } -int64_t uloop_timeout_remaining(struct uloop_timeout *timeout) +int uloop_timeout_remaining(struct uloop_timeout *timeout) { + int64_t td; struct timeval now; if (!timeout->pending) @@ -326,7 +328,14 @@ int64_t uloop_timeout_remaining(struct uloop_timeout *timeout) uloop_gettime(&now); - return tv_diff(&timeout->time, &now); + td = tv_diff(&timeout->time, &now); + + if (td > INT_MAX) + return INT_MAX; + else if (td < INT_MIN) + return INT_MIN; + else + return (int)td; } int uloop_process_add(struct uloop_process *p) @@ -92,7 +92,7 @@ int uloop_fd_delete(struct uloop_fd *sock); int uloop_timeout_add(struct uloop_timeout *timeout); int uloop_timeout_set(struct uloop_timeout *timeout, int msecs); int uloop_timeout_cancel(struct uloop_timeout *timeout); -int64_t uloop_timeout_remaining(struct uloop_timeout *timeout); +int uloop_timeout_remaining(struct uloop_timeout *timeout); int uloop_process_add(struct uloop_process *p); int uloop_process_delete(struct uloop_process *p); |