avoid alloc(0), read(fd,NULL,0), write(fd,NULL,0)

This commit is contained in:
nhmall
2024-01-07 14:30:53 -05:00
parent e7d97e3a47
commit 132d642504
2 changed files with 9 additions and 3 deletions

View File

@@ -1060,8 +1060,10 @@ getlev(NHFILE *nhfp, int pid, xint8 lev)
if (gd.doors)
free(gd.doors);
Mread(nhfp->fd, &gd.doors_alloc, sizeof gd.doors_alloc);
gd.doors = (coord *) alloc(gd.doors_alloc * sizeof (coord));
Mread(nhfp->fd, gd.doors, gd.doors_alloc * sizeof (coord));
if (gd.doors_alloc) { /* avoid pointless alloc(0) */
gd.doors = (coord *) alloc(gd.doors_alloc * sizeof (coord));
Mread(nhfp->fd, gd.doors, gd.doors_alloc * sizeof (coord));
}
}
rest_rooms(nhfp); /* No joke :-) */
if (gn.nroom)

View File

@@ -533,7 +533,11 @@ savelev_core(NHFILE *nhfp, xint8 lev)
bwrite(nhfp->fd, (genericptr_t) &gd.dndest, sizeof (dest_area));
bwrite(nhfp->fd, (genericptr_t) &gl.level.flags, sizeof gl.level.flags);
bwrite(nhfp->fd, (genericptr_t) &gd.doors_alloc, sizeof gd.doors_alloc);
bwrite(nhfp->fd, (genericptr_t) gd.doors, gd.doors_alloc * sizeof (coord));
/* don't rely on underlying write() behavior to write
* nothing if count arg is 0, just skip it */
if (gd.doors_alloc)
bwrite(nhfp->fd, (genericptr_t) gd.doors,
gd.doors_alloc * sizeof (coord));
}
save_rooms(nhfp); /* no dynamic memory to reclaim */