From 132d6425042205b0b56c6cd064c032d45a4bc5d3 Mon Sep 17 00:00:00 2001 From: nhmall Date: Sun, 7 Jan 2024 14:30:53 -0500 Subject: [PATCH] avoid alloc(0), read(fd,NULL,0), write(fd,NULL,0) --- src/restore.c | 6 ++++-- src/save.c | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/restore.c b/src/restore.c index a7883a0a1..b11c31793 100644 --- a/src/restore.c +++ b/src/restore.c @@ -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) diff --git a/src/save.c b/src/save.c index 044036ffe..148f2d630 100644 --- a/src/save.c +++ b/src/save.c @@ -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 */