fix static analyzer complaint in remove_room()

Since croom and maxroom both point to elements in the rooms[] array,
the complaint that the memcpy() in

| if (croom != maxroom)
|  memcpy(croom, maxroom, sizeof (struct room));

might have overlapping source and destination is bogus.  The fix is
trivial but not vetted by the analyzer.
This commit is contained in:
PatR
2024-06-03 09:28:38 -07:00
parent 4e29c9b282
commit 61d3cce4b8
+7 -6
View File
@@ -1,4 +1,4 @@
/* NetHack 3.7 mkmap.c $NHDT-Date: 1596498181 2020/08/03 23:43:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.28 $ */ /* NetHack 3.7 mkmap.c $NHDT-Date: 1717432093 2024/06/03 16:28:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.40 $ */
/* Copyright (c) J. C. Collet, M. Stephenson and D. Cohrs, 1992 */ /* Copyright (c) J. C. Collet, M. Stephenson and D. Cohrs, 1992 */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -403,9 +403,11 @@ remove_rooms(int lx, int ly, int hx, int hy)
} }
/* /*
* Remove roomno from the rooms array, decrementing nroom. Also updates * Remove roomno from the rooms array, decrementing nroom.
* all level roomno values of affected higher numbered rooms. Assumes * The last room is swapped from the being-removed room and locations
* level structure contents corresponding to roomno have already been reset. * within it have their roomno field updated. Other rooms are unaffected.
* Assumes level structure contents corresponding to roomno have already
* been reset.
* Currently handles only the removal of rooms that have no subrooms. * Currently handles only the removal of rooms that have no subrooms.
*/ */
staticfn void staticfn void
@@ -420,8 +422,7 @@ remove_room(unsigned int roomno)
/* since the order in the array only matters for making corridors, /* since the order in the array only matters for making corridors,
* copy the last room over the one being removed on the assumption * copy the last room over the one being removed on the assumption
* that corridors have already been dug. */ * that corridors have already been dug. */
(void) memcpy((genericptr_t) croom, (genericptr_t) maxroom, *croom = *maxroom;
sizeof(struct mkroom));
/* since maxroom moved, update affected level roomno values */ /* since maxroom moved, update affected level roomno values */
oroomno = gn.nroom + ROOMOFFSET; oroomno = gn.nroom + ROOMOFFSET;