Mercurial > hg > early-roguelike
diff arogue5/daemon.c @ 114:a5433ba4cabf
arogue5: fix some daemon-related pointer/int casting.
Daemons and fuses take a single argument, nominally an int but either
ignored or unsafely cast to a pointer. Its type has now been changed
to void*.
The save/restore code no longer tries to store this argument in the
savefile. For doctor(), this is not a problem, because player is the
only argument it is ever given as a daemon. However, alchemy() will
fail to do anything when passed NULL. Fixing this would be complicated
but possible.
Summary: the code is slightly safer, but alchemy jugs are guaranteed to
stop working after save and restore, instead of just extremely likely.
author | John "Elwin" Edwards |
---|---|
date | Fri, 28 Mar 2014 10:57:03 -0700 |
parents | f2951c4e28d9 |
children | 56e748983fa8 |
line wrap: on
line diff
--- a/arogue5/daemon.c Thu Mar 27 11:09:30 2014 -0700 +++ b/arogue5/daemon.c Fri Mar 28 10:57:03 2014 -0700 @@ -87,8 +87,7 @@ * start_daemon: * Start a daemon, takes a function. */ -start_daemon(func, arg, type) -reg int arg, type, (*func)(); +start_daemon(int (*func)(), void *arg, int type) { reg struct delayed_action *dev; @@ -122,7 +121,7 @@ * Take it out of the list */ dev->d_type = EMPTY; - dev->d_arg = 0; + dev->d_arg = NULL; dev->d_func = NULL; dev->d_time = 0; demoncnt -= 1; /* update count */ @@ -155,8 +154,7 @@ * fuse: * Start a fuse to go off in a certain number of turns */ -fuse(func, arg, time, type) -reg int (*func)(), arg, time, type; +fuse(int (*func)(), void *arg, int time, int type) { reg struct delayed_action *wire; @@ -199,7 +197,7 @@ return; wire->d_type = EMPTY; wire->d_func = NULL; - wire->d_arg = 0; + wire->d_arg = NULL; wire->d_time = 0; fusecnt -= 1; }