mread() in restore.c

Update and apply an old stashed commit:  hide the casts in calls to
mread() made in restore.c.  Some split lines get recombined and there
is less clutter when reading the code.
This commit is contained in:
PatR
2023-02-08 12:59:47 -08:00
parent bfd3cee886
commit ab00de45d1
+106 -99
View File
@@ -62,6 +62,11 @@ extern int amii_numcolors;
#define Is_IceBox(o) ((o)->otyp == ICE_BOX ? TRUE : FALSE) #define Is_IceBox(o) ((o)->otyp == ICE_BOX ? TRUE : FALSE)
/* third arg passed to mread() should be 'unsigned' but most calls use
sizeof so are attempting to pass 'size_t'; mread()'s prototype results
in an implicit conversion; this macro does it explicitly */
#define Mread(fd,adr,siz) mread((fd), (genericptr_t) (adr), (unsigned) (siz))
/* Recalculate gl.level.objects[x][y], since this info was not saved. */ /* Recalculate gl.level.objects[x][y], since this info was not saved. */
static void static void
find_lev_obj(void) find_lev_obj(void)
@@ -121,19 +126,19 @@ inven_inuse(boolean quietly)
} }
static void static void
restlevchn(NHFILE* nhfp) restlevchn(NHFILE *nhfp)
{ {
int cnt = 0; int cnt = 0;
s_level *tmplev, *x; s_level *tmplev, *x;
gs.sp_levchn = (s_level *) 0; gs.sp_levchn = (s_level *) 0;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &cnt, sizeof(int)); Mread(nhfp->fd, &cnt, sizeof cnt);
for (; cnt > 0; cnt--) { for (; cnt > 0; cnt--) {
tmplev = (s_level *) alloc(sizeof(s_level)); tmplev = (s_level *) alloc(sizeof(s_level));
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) tmplev, sizeof(s_level)); Mread(nhfp->fd, tmplev, sizeof *tmplev);
if (!gs.sp_levchn) if (!gs.sp_levchn)
gs.sp_levchn = tmplev; gs.sp_levchn = tmplev;
@@ -147,7 +152,7 @@ restlevchn(NHFILE* nhfp)
} }
static void static void
restdamage(NHFILE* nhfp) restdamage(NHFILE *nhfp)
{ {
unsigned int dmgcount = 0; unsigned int dmgcount = 0;
int counter; int counter;
@@ -155,7 +160,7 @@ restdamage(NHFILE* nhfp)
boolean ghostly = (nhfp->ftype == NHF_BONESFILE); boolean ghostly = (nhfp->ftype == NHF_BONESFILE);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &dmgcount, sizeof dmgcount); Mread(nhfp->fd, &dmgcount, sizeof dmgcount);
counter = (int) dmgcount; counter = (int) dmgcount;
if (!counter) if (!counter)
@@ -163,7 +168,7 @@ restdamage(NHFILE* nhfp)
do { do {
tmp_dam = (struct damage *) alloc(sizeof *tmp_dam); tmp_dam = (struct damage *) alloc(sizeof *tmp_dam);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) tmp_dam, sizeof *tmp_dam); Mread(nhfp->fd, tmp_dam, sizeof *tmp_dam);
if (ghostly) if (ghostly)
tmp_dam->when += (gm.moves - go.omoves); tmp_dam->when += (gm.moves - go.omoves);
@@ -175,12 +180,12 @@ restdamage(NHFILE* nhfp)
/* restore one object */ /* restore one object */
static void static void
restobj(NHFILE* nhfp, struct obj *otmp) restobj(NHFILE *nhfp, struct obj *otmp)
{ {
int buflen = 0; int buflen = 0;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) otmp, sizeof(struct obj)); Mread(nhfp->fd, otmp, sizeof *otmp);
otmp->lua_ref_cnt = 0; otmp->lua_ref_cnt = 0;
/* next object pointers are invalid; otmp->cobj needs to be left /* next object pointers are invalid; otmp->cobj needs to be left
@@ -192,17 +197,17 @@ restobj(NHFILE* nhfp, struct obj *otmp)
/* oname - object's name */ /* oname - object's name */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { /* includes terminating '\0' */ if (buflen > 0) { /* includes terminating '\0' */
new_oname(otmp, buflen); new_oname(otmp, buflen);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) ONAME(otmp), buflen); Mread(nhfp->fd, ONAME(otmp), buflen);
} }
/* omonst - corpse or statue might retain full monster details */ /* omonst - corpse or statue might retain full monster details */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
newomonst(otmp); newomonst(otmp);
/* this is actually a monst struct, so we /* this is actually a monst struct, so we
@@ -212,12 +217,12 @@ restobj(NHFILE* nhfp, struct obj *otmp)
/* omailcmd - feedback mechanism for scroll of mail */ /* omailcmd - feedback mechanism for scroll of mail */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
char *omailcmd = (char *) alloc(buflen); char *omailcmd = (char *) alloc(buflen);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) omailcmd, buflen); Mread(nhfp->fd, omailcmd, buflen);
new_omailcmd(otmp, omailcmd); new_omailcmd(otmp, omailcmd);
free((genericptr_t) omailcmd); free((genericptr_t) omailcmd);
} }
@@ -225,12 +230,12 @@ restobj(NHFILE* nhfp, struct obj *otmp)
/* omid - monster id number, connecting corpse to ghost */ /* omid - monster id number, connecting corpse to ghost */
newomid(otmp); /* superfluous; we're already allocated otmp->oextra */ newomid(otmp); /* superfluous; we're already allocated otmp->oextra */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &OMID(otmp), sizeof OMID(otmp)); Mread(nhfp->fd, &OMID(otmp), sizeof OMID(otmp));
} }
} }
static struct obj * static struct obj *
restobjchn(NHFILE* nhfp, boolean frozen) restobjchn(NHFILE *nhfp, boolean frozen)
{ {
register struct obj *otmp, *otmp2 = 0; register struct obj *otmp, *otmp2 = 0;
register struct obj *first = (struct obj *) 0; register struct obj *first = (struct obj *) 0;
@@ -239,7 +244,7 @@ restobjchn(NHFILE* nhfp, boolean frozen)
while (1) { while (1) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof buflen); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen == -1) if (buflen == -1)
break; break;
@@ -298,12 +303,12 @@ restobjchn(NHFILE* nhfp, boolean frozen)
/* restore one monster */ /* restore one monster */
static void static void
restmon(NHFILE* nhfp, struct monst* mtmp) restmon(NHFILE *nhfp, struct monst *mtmp)
{ {
int buflen = 0; int buflen = 0;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) mtmp, sizeof(struct monst)); Mread(nhfp->fd, mtmp, sizeof *mtmp);
/* next monster pointer is invalid */ /* next monster pointer is invalid */
mtmp->nmon = (struct monst *) 0; mtmp->nmon = (struct monst *) 0;
@@ -313,67 +318,62 @@ restmon(NHFILE* nhfp, struct monst* mtmp)
/* mgivenname - monster's name */ /* mgivenname - monster's name */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { /* includes terminating '\0' */ if (buflen > 0) { /* includes terminating '\0' */
new_mgivenname(mtmp, buflen); new_mgivenname(mtmp, buflen);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) MGIVENNAME(mtmp), buflen); Mread(nhfp->fd, MGIVENNAME(mtmp), buflen);
} }
/* egd - vault guard */ /* egd - vault guard */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof buflen); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
newegd(mtmp); newegd(mtmp);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) EGD(mtmp), sizeof (struct egd)); Mread(nhfp->fd, EGD(mtmp), sizeof (struct egd));
} }
/* epri - temple priest */ /* epri - temple priest */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
newepri(mtmp); newepri(mtmp);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) EPRI(mtmp), Mread(nhfp->fd, EPRI(mtmp), sizeof (struct epri));
sizeof (struct epri));
} }
/* eshk - shopkeeper */ /* eshk - shopkeeper */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
neweshk(mtmp); neweshk(mtmp);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) ESHK(mtmp), Mread(nhfp->fd, ESHK(mtmp), sizeof (struct eshk));
sizeof (struct eshk));
} }
/* emin - minion */ /* emin - minion */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
newemin(mtmp); newemin(mtmp);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) EMIN(mtmp), Mread(nhfp->fd, EMIN(mtmp), sizeof (struct emin));
sizeof (struct emin));
} }
/* edog - pet */ /* edog - pet */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen > 0) { if (buflen > 0) {
newedog(mtmp); newedog(mtmp);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) EDOG(mtmp), Mread(nhfp->fd, EDOG(mtmp), sizeof (struct edog));
sizeof (struct edog));
} }
/* mcorpsenm - obj->corpsenm for mimic posing as corpse or /* mcorpsenm - obj->corpsenm for mimic posing as corpse or
statue (inline int rather than pointer to something) */ statue (inline int rather than pointer to something) */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &MCORPSENM(mtmp), Mread(nhfp->fd, &MCORPSENM(mtmp), sizeof MCORPSENM(mtmp));
sizeof MCORPSENM(mtmp));
} /* mextra */ } /* mextra */
} }
static struct monst * static struct monst *
restmonchn(NHFILE* nhfp) restmonchn(NHFILE *nhfp)
{ {
register struct monst *mtmp, *mtmp2 = 0; register struct monst *mtmp, *mtmp2 = 0;
register struct monst *first = (struct monst *) 0; register struct monst *first = (struct monst *) 0;
@@ -382,7 +382,7 @@ restmonchn(NHFILE* nhfp)
while (1) { while (1) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &buflen, sizeof(buflen)); Mread(nhfp->fd, &buflen, sizeof buflen);
if (buflen == -1) if (buflen == -1)
break; break;
@@ -450,7 +450,7 @@ restmonchn(NHFILE* nhfp)
} }
static struct fruit * static struct fruit *
loadfruitchn(NHFILE* nhfp) loadfruitchn(NHFILE *nhfp)
{ {
register struct fruit *flist, *fnext; register struct fruit *flist, *fnext;
@@ -458,7 +458,7 @@ loadfruitchn(NHFILE* nhfp)
for (;;) { for (;;) {
fnext = newfruit(); fnext = newfruit();
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t)fnext, sizeof *fnext); Mread(nhfp->fd, fnext, sizeof *fnext);
if (fnext->fid != 0) { if (fnext->fid != 0) {
fnext->nextf = flist; fnext->nextf = flist;
flist = fnext; flist = fnext;
@@ -470,7 +470,7 @@ loadfruitchn(NHFILE* nhfp)
} }
static void static void
freefruitchn(register struct fruit* flist) freefruitchn(register struct fruit *flist)
{ {
register struct fruit *fnext; register struct fruit *fnext;
@@ -482,7 +482,7 @@ freefruitchn(register struct fruit* flist)
} }
static void static void
ghostfruit(register struct obj* otmp) ghostfruit(register struct obj *otmp)
{ {
register struct fruit *oldf; register struct fruit *oldf;
@@ -504,7 +504,9 @@ ghostfruit(register struct obj* otmp)
static static
boolean boolean
restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid) restgamestate(
NHFILE *nhfp,
unsigned *stuckid, unsigned *steedid)
{ {
struct flag newgameflags; struct flag newgameflags;
struct context_info newgamecontext; /* all 0, but has some pointers */ struct context_info newgamecontext; /* all 0, but has some pointers */
@@ -515,7 +517,7 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid)
boolean defer_perm_invent; boolean defer_perm_invent;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &uid, sizeof uid); Mread(nhfp->fd, &uid, sizeof uid);
if (SYSOPT_CHECK_SAVE_UID if (SYSOPT_CHECK_SAVE_UID
&& uid != (unsigned long) getuid()) { /* strange ... */ && uid != (unsigned long) getuid()) { /* strange ... */
@@ -528,7 +530,7 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid)
newgamecontext = gc.context; /* copy statically init'd context */ newgamecontext = gc.context; /* copy statically init'd context */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &gc.context, sizeof (struct context_info)); Mread(nhfp->fd, &gc.context, sizeof gc.context);
gc.context.warntype.species = (gc.context.warntype.speciesidx >= LOW_PM) gc.context.warntype.species = (gc.context.warntype.speciesidx >= LOW_PM)
? &mons[gc.context.warntype.speciesidx] ? &mons[gc.context.warntype.speciesidx]
: (struct permonst *) 0; : (struct permonst *) 0;
@@ -541,7 +543,7 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid)
if partial restore fails and we resort to starting a new game */ if partial restore fails and we resort to starting a new game */
newgameflags = flags; newgameflags = flags;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &flags, sizeof (struct flag)); Mread(nhfp->fd, &flags, sizeof flags);
/* avoid keeping permanent inventory window up to date during restore /* avoid keeping permanent inventory window up to date during restore
(setworn() calls update_inventory); attempting to include the cost (setworn() calls update_inventory); attempting to include the cost
@@ -569,18 +571,18 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid)
amii_setpens(amii_numcolors); /* use colors from save file */ amii_setpens(amii_numcolors); /* use colors from save file */
#endif #endif
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &u, sizeof(struct you)); Mread(nhfp->fd, &u, sizeof u);
gy.youmonst.cham = u.mcham; gy.youmonst.cham = u.mcham;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) timebuf, 14); Mread(nhfp->fd, timebuf, 14);
timebuf[14] = '\0'; timebuf[14] = '\0';
ubirthday = time_from_yyyymmddhhmmss(timebuf); ubirthday = time_from_yyyymmddhhmmss(timebuf);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, &urealtime.realtime, sizeof urealtime.realtime); Mread(nhfp->fd, &urealtime.realtime, sizeof urealtime.realtime);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) timebuf, 14); Mread(nhfp->fd, timebuf, 14);
timebuf[14] = '\0'; timebuf[14] = '\0';
urealtime.start_timing = time_from_yyyymmddhhmmss(timebuf); urealtime.start_timing = time_from_yyyymmddhhmmss(timebuf);
@@ -632,7 +634,7 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid)
gm.migrating_mons = restmonchn(nhfp); gm.migrating_mons = restmonchn(nhfp);
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) gm.mvitals, sizeof gm.mvitals); Mread(nhfp->fd, &gm.mvitals[0], sizeof gm.mvitals);
} }
/* /*
@@ -660,27 +662,25 @@ restgamestate(NHFILE* nhfp, unsigned int* stuckid, unsigned int* steedid)
restore_dungeon(nhfp); restore_dungeon(nhfp);
restlevchn(nhfp); restlevchn(nhfp);
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &gm.moves, sizeof gm.moves); Mread(nhfp->fd, &gm.moves, sizeof gm.moves);
/* hero_seq isn't saved and restored because it can be recalculated */ /* hero_seq isn't saved and restored because it can be recalculated */
gh.hero_seq = gm.moves << 3; /* normally handled in moveloop() */ gh.hero_seq = gm.moves << 3; /* normally handled in moveloop() */
mread(nhfp->fd, (genericptr_t) &gq.quest_status, Mread(nhfp->fd, &gq.quest_status, sizeof gq.quest_status);
sizeof (struct q_score)); Mread(nhfp->fd, gs.spl_book, (MAXSPELL + 1) * sizeof (struct spell));
mread(nhfp->fd, (genericptr_t) gs.spl_book,
(MAXSPELL + 1) * sizeof (struct spell));
} }
restore_artifacts(nhfp); restore_artifacts(nhfp);
restore_oracles(nhfp); restore_oracles(nhfp);
if (u.ustuck) { if (u.ustuck) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) stuckid, sizeof *stuckid); Mread(nhfp->fd, stuckid, sizeof *stuckid);
} }
if (u.usteed) { if (u.usteed) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) steedid, sizeof *steedid); Mread(nhfp->fd, steedid, sizeof *steedid);
} }
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) gp.pl_character, sizeof gp.pl_character); Mread(nhfp->fd, gp.pl_character, sizeof gp.pl_character);
mread(nhfp->fd, (genericptr_t) gp.pl_fruit, sizeof gp.pl_fruit); Mread(nhfp->fd, gp.pl_fruit, sizeof gp.pl_fruit);
} }
freefruitchn(gf.ffruit); /* clean up fruit(s) made by initoptions() */ freefruitchn(gf.ffruit); /* clean up fruit(s) made by initoptions() */
gf.ffruit = loadfruitchn(nhfp); gf.ffruit = loadfruitchn(nhfp);
@@ -745,7 +745,7 @@ restlevelfile(xint8 ltmp)
} }
int int
dorecover(NHFILE* nhfp) dorecover(NHFILE *nhfp)
{ {
unsigned int stuckid = 0, steedid = 0; /* not a register */ unsigned int stuckid = 0, steedid = 0; /* not a register */
xint8 ltmp = 0; xint8 ltmp = 0;
@@ -815,7 +815,7 @@ dorecover(NHFILE* nhfp)
restoreinfo.mread_flags = 1; /* return despite error */ restoreinfo.mread_flags = 1; /* return despite error */
while (1) { while (1) {
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &ltmp, sizeof ltmp); Mread(nhfp->fd, &ltmp, sizeof ltmp);
if (restoreinfo.mread_flags == -1) if (restoreinfo.mread_flags == -1)
break; break;
} }
@@ -896,7 +896,7 @@ dorecover(NHFILE* nhfp)
} }
static void static void
rest_stairs(NHFILE* nhfp) rest_stairs(NHFILE *nhfp)
{ {
int buflen = 0; int buflen = 0;
stairway stway = UNDEFINED_VALUES; stairway stway = UNDEFINED_VALUES;
@@ -905,14 +905,14 @@ rest_stairs(NHFILE* nhfp)
stairway_free_all(); stairway_free_all();
while (1) { while (1) {
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &buflen, sizeof buflen); Mread(nhfp->fd, &buflen, sizeof buflen);
} }
if (buflen == -1) if (buflen == -1)
break; break;
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &stway, sizeof (stairway)); Mread(nhfp->fd, &stway, sizeof stway);
} }
if (gp.program_state.restoring != REST_GSTATE if (gp.program_state.restoring != REST_GSTATE
&& stway.tolev.dnum == u.uz.dnum) { && stway.tolev.dnum == u.uz.dnum) {
@@ -928,19 +928,19 @@ rest_stairs(NHFILE* nhfp)
} }
void void
restcemetery(NHFILE* nhfp, struct cemetery** cemeteryaddr) restcemetery(NHFILE *nhfp, struct cemetery **cemeteryaddr)
{ {
struct cemetery *bonesinfo, **bonesaddr; struct cemetery *bonesinfo, **bonesaddr;
int cflag = 0; int cflag = 0;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &cflag, sizeof cflag); Mread(nhfp->fd, &cflag, sizeof cflag);
if (cflag == 0) { if (cflag == 0) {
bonesaddr = cemeteryaddr; bonesaddr = cemeteryaddr;
do { do {
bonesinfo = (struct cemetery *) alloc(sizeof *bonesinfo); bonesinfo = (struct cemetery *) alloc(sizeof *bonesinfo);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) bonesinfo, sizeof *bonesinfo); Mread(nhfp->fd, bonesinfo, sizeof *bonesinfo);
*bonesaddr = bonesinfo; *bonesaddr = bonesinfo;
bonesaddr = &(*bonesaddr)->next; bonesaddr = &(*bonesaddr)->next;
} while (*bonesaddr); } while (*bonesaddr);
@@ -978,8 +978,8 @@ rest_levl(
j += 1; j += 1;
} else { } else {
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) &len, sizeof(uchar)); Mread(nhfp->fd, &len, sizeof len);
mread(nhfp->fd, (genericptr_t) &r, sizeof(struct rm)); Mread(nhfp->fd, &r, sizeof r);
} }
} }
} }
@@ -990,7 +990,7 @@ rest_levl(
} }
#endif /* RLECOMP */ #endif /* RLECOMP */
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) levl, sizeof levl); Mread(nhfp->fd, levl, sizeof levl);
} }
} }
@@ -1005,7 +1005,7 @@ trickery(char *reason)
} }
void void
getlev(NHFILE* nhfp, int pid, xint8 lev) getlev(NHFILE *nhfp, int pid, xint8 lev)
{ {
register struct trap *trap; register struct trap *trap;
register struct monst *mtmp; register struct monst *mtmp;
@@ -1034,16 +1034,16 @@ getlev(NHFILE* nhfp, int pid, xint8 lev)
/* First some sanity checks */ /* First some sanity checks */
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &hpid, sizeof(hpid)); Mread(nhfp->fd, &hpid, sizeof hpid);
/* CHECK: This may prevent restoration */ /* CHECK: This may prevent restoration */
#ifdef TOS #ifdef TOS
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &tlev, sizeof(tlev)); Mread(nhfp->fd, &tlev, sizeof tlev);
dlvl = tlev & 0x00ff; dlvl = tlev & 0x00ff;
#else #else
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &dlvl, sizeof(dlvl)); Mread(nhfp->fd, &dlvl, sizeof dlvl);
#endif #endif
if ((pid && pid != hpid) || (lev && dlvl != lev)) { if ((pid && pid != hpid) || (lev && dlvl != lev)) {
char trickbuf[BUFSZ]; char trickbuf[BUFSZ];
@@ -1061,25 +1061,26 @@ getlev(NHFILE* nhfp, int pid, xint8 lev)
rest_levl(nhfp, rest_levl(nhfp,
(boolean) ((sfrestinfo.sfi1 & SFI1_RLECOMP) == SFI1_RLECOMP)); (boolean) ((sfrestinfo.sfi1 & SFI1_RLECOMP) == SFI1_RLECOMP));
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) gl.lastseentyp, sizeof(gl.lastseentyp)); Mread(nhfp->fd, gl.lastseentyp, sizeof gl.lastseentyp);
mread(nhfp->fd, (genericptr_t) &go.omoves, sizeof(go.omoves)); Mread(nhfp->fd, &go.omoves, sizeof go.omoves);
} }
elapsed = gm.moves - go.omoves; elapsed = gm.moves - go.omoves;
if (nhfp->structlevel) { if (nhfp->structlevel) {
rest_stairs(nhfp); rest_stairs(nhfp);
mread(nhfp->fd, (genericptr_t)&gu.updest, sizeof(dest_area)); Mread(nhfp->fd, &gu.updest, sizeof gu.updest);
mread(nhfp->fd, (genericptr_t)&gd.dndest, sizeof(dest_area)); Mread(nhfp->fd, &gd.dndest, sizeof gd.dndest);
mread(nhfp->fd, (genericptr_t)&gl.level.flags, sizeof(gl.level.flags)); Mread(nhfp->fd, &gl.level.flags, sizeof gl.level.flags);
if (gd.doors) if (gd.doors)
free(gd.doors); free(gd.doors);
mread(nhfp->fd, (genericptr_t) &gd.doors_alloc, sizeof (gd.doors_alloc)); Mread(nhfp->fd, &gd.doors_alloc, sizeof gd.doors_alloc);
gd.doors = (coord *) alloc(gd.doors_alloc * sizeof (coord)); gd.doors = (coord *) alloc(gd.doors_alloc * sizeof (coord));
mread(nhfp->fd, (genericptr_t) gd.doors, gd.doors_alloc * sizeof (coord)); Mread(nhfp->fd, gd.doors, gd.doors_alloc * sizeof (coord));
} }
rest_rooms(nhfp); /* No joke :-) */ rest_rooms(nhfp); /* No joke :-) */
if (gn.nroom) if (gn.nroom)
gd.doorindex = gr.rooms[gn.nroom - 1].fdoor + gr.rooms[gn.nroom - 1].doorct; gd.doorindex = gr.rooms[gn.nroom - 1].fdoor
+ gr.rooms[gn.nroom - 1].doorct;
else else
gd.doorindex = 0; gd.doorindex = 0;
@@ -1094,7 +1095,7 @@ getlev(NHFILE* nhfp, int pid, xint8 lev)
for (;;) { for (;;) {
trap = newtrap(); trap = newtrap();
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t)trap, sizeof(struct trap)); Mread(nhfp->fd, trap, sizeof *trap);
if (trap->tx != 0) { if (trap->tx != 0) {
if (gp.program_state.restoring != REST_GSTATE if (gp.program_state.restoring != REST_GSTATE
&& trap->dst.dnum == u.uz.dnum) { && trap->dst.dnum == u.uz.dnum) {
@@ -1233,7 +1234,7 @@ getlev(NHFILE* nhfp, int pid, xint8 lev)
} }
void void
get_plname_from_file(NHFILE* nhfp, char *plbuf) get_plname_from_file(NHFILE *nhfp, char *plbuf)
{ {
int pltmpsiz = 0; int pltmpsiz = 0;
@@ -1255,14 +1256,14 @@ rest_bubbles(NHFILE *nhfp)
know what level is being restored */ know what level is being restored */
bbubbly = 0; bbubbly = 0;
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &bbubbly, sizeof bbubbly); Mread(nhfp->fd, &bbubbly, sizeof bbubbly);
if (bbubbly) if (bbubbly)
restore_waterlevel(nhfp); restore_waterlevel(nhfp);
} }
static void static void
restore_gamelog(NHFILE* nhfp) restore_gamelog(NHFILE *nhfp)
{ {
int slen = 0; int slen = 0;
char msg[BUFSZ*2]; char msg[BUFSZ*2];
@@ -1270,14 +1271,14 @@ restore_gamelog(NHFILE* nhfp)
while (1) { while (1) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t)&slen, sizeof(slen)); Mread(nhfp->fd, &slen, sizeof slen);
if (slen == -1) if (slen == -1)
break; break;
if (slen > ((BUFSZ*2) - 1)) if (slen > ((BUFSZ*2) - 1))
panic("restore_gamelog: msg too big (%d)", slen); panic("restore_gamelog: msg too big (%d)", slen);
if (nhfp->structlevel) { if (nhfp->structlevel) {
mread(nhfp->fd, (genericptr_t) msg, slen); Mread(nhfp->fd, msg, slen);
mread(nhfp->fd, (genericptr_t) &tmp, sizeof(tmp)); Mread(nhfp->fd, &tmp, sizeof tmp);
msg[slen] = '\0'; msg[slen] = '\0';
gamelog_add(tmp.flags, tmp.turn, msg); gamelog_add(tmp.flags, tmp.turn, msg);
} }
@@ -1285,20 +1286,20 @@ restore_gamelog(NHFILE* nhfp)
} }
static void static void
restore_msghistory(NHFILE* nhfp) restore_msghistory(NHFILE *nhfp)
{ {
int msgsize = 0, msgcount = 0; int msgsize = 0, msgcount = 0;
char msg[BUFSZ]; char msg[BUFSZ];
while (1) { while (1) {
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) &msgsize, sizeof(msgsize)); Mread(nhfp->fd, &msgsize, sizeof msgsize);
if (msgsize == -1) if (msgsize == -1)
break; break;
if (msgsize > (BUFSZ - 1)) if (msgsize > BUFSZ - 1)
panic("restore_msghistory: msg too big (%d)", msgsize); panic("restore_msghistory: msg too big (%d)", msgsize);
if (nhfp->structlevel) if (nhfp->structlevel)
mread(nhfp->fd, (genericptr_t) msg, msgsize); Mread(nhfp->fd, msg, msgsize);
msg[msgsize] = '\0'; msg[msgsize] = '\0';
putmsghistory(msg, TRUE); putmsghistory(msg, TRUE);
++msgcount; ++msgcount;
@@ -1468,7 +1469,7 @@ restore_menu(
#endif /* SELECTSAVED */ #endif /* SELECTSAVED */
int int
validate(NHFILE* nhfp, const char *name) validate(NHFILE *nhfp, const char *name)
{ {
readLenType rlen = 0; readLenType rlen = 0;
struct savefile_info sfi; struct savefile_info sfi;
@@ -1477,18 +1478,22 @@ validate(NHFILE* nhfp, const char *name)
if (nhfp->structlevel) if (nhfp->structlevel)
utdflags |= UTD_CHECKSIZES; utdflags |= UTD_CHECKSIZES;
if (!(reslt = uptodate(nhfp, name, utdflags))) return 1; if (!(reslt = uptodate(nhfp, name, utdflags)))
return 1;
if ((nhfp->mode & WRITING) == 0) { if ((nhfp->mode & WRITING) == 0) {
if (nhfp->structlevel) if (nhfp->structlevel)
rlen = (readLenType) read(nhfp->fd, (genericptr_t) &sfi, sizeof sfi); rlen = (readLenType) read(nhfp->fd, (genericptr_t) &sfi,
sizeof sfi);
} else { } else {
if (nhfp->structlevel) if (nhfp->structlevel)
rlen = (readLenType) read(nhfp->fd, (genericptr_t) &sfi, sizeof sfi); rlen = (readLenType) read(nhfp->fd, (genericptr_t) &sfi,
sizeof sfi);
minit(); /* ZEROCOMP */ minit(); /* ZEROCOMP */
if (rlen == 0) { if (rlen == 0) {
if (verbose) { if (verbose) {
pline("File \"%s\" is empty during save file feature check?", name); pline("File \"%s\" is empty during save file feature check?",
name);
wait_synch(); wait_synch();
} }
return -1; return -1;
@@ -1497,4 +1502,6 @@ validate(NHFILE* nhfp, const char *name)
return 0; return 0;
} }
#undef Mread
/*restore.c*/ /*restore.c*/