use memset to clear the msgstats in folder_realloc
authorPhilipp Takacs <philipp@bureaucracy.de>
Wed, 18 Mar 2020 20:46:30 +0000 (21:46 +0100)
committerPhilipp Takacs <philipp@bureaucracy.de>
Tue, 31 Mar 2020 21:10:20 +0000 (23:10 +0200)
sbr/folder_realloc.c

index 64a6640..52c3647 100644 (file)
@@ -46,6 +46,12 @@ folder_realloc(struct msgs *mp, int lo, int hi)
                ** just realloc the message status array.
                */
                mp->msgstats = mh_xrealloc(mp->msgstats, MSGSTATSIZE(mp, lo, hi));
+               /*
+               ** Clear the newly allocated msg flag space. The lowoff and
+               ** hghoff are the old messagenumber range. So the calculation
+               ** of the first new element has to subtract lowoff.
+               */
+               memset(mp->msgstats + mp->hghoff - lo + 1, 0, hi - mp->hghoff);
        } else {
                /*
                ** We are changing the offset of the message status
@@ -69,20 +75,5 @@ folder_realloc(struct msgs *mp, int lo, int hi)
        mp->lowoff = lo;
        mp->hghoff = hi;
 
-       /*
-       ** Clear all the flags for entries outside
-       ** the current message range for this folder.
-       */
-       if (mp->nummsg > 0) {
-               for (msgnum = mp->lowoff; msgnum < mp->lowmsg; msgnum++)
-                       clear_msg_flags(mp, msgnum);
-               for (msgnum = mp->hghmsg + 1; msgnum <= mp->hghoff; msgnum++)
-                       clear_msg_flags(mp, msgnum);
-       } else {
-               /* no messages, so clear entire range */
-               for (msgnum = mp->lowoff; msgnum <= mp->hghoff; msgnum++)
-                       clear_msg_flags(mp, msgnum);
-       }
-
        return mp;
 }