- if (lo == mp->lowoff) {
- /*
- * We are just extending (or shrinking) the end of message
- * status array. So we don't have to move anything and can
- * just realloc the message status array.
- */
- mp->msgstats = mh_xrealloc (mp->msgstats, MSGSTATSIZE(mp, lo, hi));
- } else {
- /*
- * We are changing the offset of the message status
- * array. So we will need to shift everything.
- */
- seqset_t *tmpstats;
-
- /* first allocate the new message status space */
- tmpstats = mh_xmalloc (MSGSTATSIZE(mp, lo, hi));
-
- /* then copy messages status array with shift */
- if (mp->nummsg > 0) {
- for (msgnum = mp->lowmsg; msgnum <= mp->hghmsg; msgnum++)
- tmpstats[msgnum - lo] = mp->msgstats[msgnum - mp->lowoff];
- }
- free(mp->msgstats);
- mp->msgstats = tmpstats;
+ /* first allocate the new message status space */
+ mp->num_msgstats = MSGSTATNUM (lo, hi);
+ tmpstats = mh_xmalloc (MSGSTATSIZE(mp));
+ for (i = 0, t = tmpstats; i < mp->num_msgstats; ++i, ++t) {
+ bvector_init(t);