/*
* folder_realloc.c -- realloc a folder/msgs structure
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
return mp;
if (lo == mp->lowoff) {
+ bvector_t *v;
+ size_t old_size = mp->num_msgstats;
+ size_t new_size = hi - lo + 1;
+ size_t i;
+
/*
* 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.
*/
- if (!(mp->msgstats = realloc (mp->msgstats, MSGSTATSIZE(mp, lo, hi)))) {
- advise (NULL, "unable to reallocate message storage");
- return NULL;
+
+ for (i = old_size, v = &mp->msgstats[old_size-1]; i > new_size;
+ --i, --v) {
+ bvector_free (*v);
+ }
+ mp->num_msgstats = MSGSTATNUM (lo, hi);
+ mp->msgstats =
+ mh_xrealloc (mp->msgstats, MSGSTATSIZE(mp));
+ for (i = old_size, v = &mp->msgstats[old_size]; i < new_size;
+ ++i, ++v) {
+ *v = bvector_create (0);
}
} else {
/*
* We are changing the offset of the message status
* array. So we will need to shift everything.
*/
- seqset_t *tmpstats;
+ bvector_t *tmpstats, *t;
+ size_t i;
/* first allocate the new message status space */
- tmpstats = mh_xmalloc (MSGSTATSIZE(mp, lo, hi));
+ mp->num_msgstats = MSGSTATNUM (lo, hi);
+ tmpstats = mh_xmalloc (MSGSTATSIZE(mp));
+ for (i = 0, t = tmpstats; i < mp->num_msgstats; ++i, ++t) {
+ *t = bvector_create (0);
+ }
/* 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];
+ bvector_copy (tmpstats[msgnum - lo], msgstat (mp, msgnum));
}
free(mp->msgstats);
mp->msgstats = tmpstats;