X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/7cd7de02fab619939e6665c251b246615ecce96e..HEAD:/timing.c diff --git a/timing.c b/timing.c index 9c2a8787..ccd76cd6 100644 --- a/timing.c +++ b/timing.c @@ -36,13 +36,13 @@ struct timer { timer_fn_t fn; void *ctx; - long now; - long when_set; + unsigned long now; + unsigned long when_set; }; static tree234 *timers = NULL; static tree234 *timer_contexts = NULL; -static long now = 0L; +static unsigned long now = 0L; static int compare_timers(void *av, void *bv) { @@ -62,7 +62,11 @@ static int compare_timers(void *av, void *bv) */ #if defined(__LCC__) || defined(__clang__) /* lcc won't let us compare function pointers. Legal, but annoying. */ - return memcmp(&a->fn, &b->fn, sizeof(a->fn)); + { + int c = memcmp(&a->fn, &b->fn, sizeof(a->fn)); + if (c) + return c; + } #else if (a->fn < b->fn) return -1; @@ -102,9 +106,9 @@ static void init_timers(void) } } -long schedule_timer(int ticks, timer_fn_t fn, void *ctx) +unsigned long schedule_timer(int ticks, timer_fn_t fn, void *ctx) { - long when; + unsigned long when; struct timer *t, *first; init_timers(); @@ -149,7 +153,7 @@ long schedule_timer(int ticks, timer_fn_t fn, void *ctx) * Returns the time (in ticks) expected until the next timer after * that triggers. */ -int run_timers(long anow, long *next) +int run_timers(unsigned long anow, unsigned long *next) { struct timer *first; @@ -170,8 +174,8 @@ int run_timers(long anow, long *next) */ delpos234(timers, 0); sfree(first); - } else if (first->now - now <= 0 || - now - (first->when_set - 10) < 0) { + } else if (now - (first->when_set - 10) > + first->now - (first->when_set - 10)) { /* * This timer is active and has reached its running * time. Run it.