X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffolder_realloc.c;h=52c3647dfda7b891455c2e62b106af79eb96750a;hp=47b9281ee92205ed9a4d31cb78e079a74522f74d;hb=a4ff68e851c0931ced437f73a1acb0fedb28bec3;hpb=cf1205b5cbea2f0cd6ea710ec16c637df85b647c diff --git a/sbr/folder_realloc.c b/sbr/folder_realloc.c index 47b9281..52c3647 100644 --- a/sbr/folder_realloc.c +++ b/sbr/folder_realloc.c @@ -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 @@ -54,7 +60,7 @@ folder_realloc(struct msgs *mp, int lo, int hi) seqset_t *tmpstats; /* first allocate the new message status space */ - tmpstats = mh_xmalloc(MSGSTATSIZE(mp, lo, hi)); + tmpstats = mh_xcalloc(MSGSTATSIZE(mp, lo, hi), 1); /* then copy messages status array with shift */ if (mp->nummsg > 0) { @@ -62,27 +68,12 @@ folder_realloc(struct msgs *mp, int lo, int hi) tmpstats[msgnum - lo] = mp->msgstats[msgnum - mp->lowoff]; } } - free(mp->msgstats); + mh_free0(&(mp->msgstats)); mp->msgstats = tmpstats; } 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; }