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)
{
*/
#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;
}
}
-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();
* 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;
*/
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.