]>
diplodocus.org Git - nmh/blob - sbr/folder_pack.c
3 * folder_pack.c -- pack (renumber) the messages in a folder
4 * -- into a contiguous range from 1 to n.
12 * Pack the message in a folder.
13 * Return -1 if error, else return 0.
17 folder_pack (struct msgs
**mpp
, int verbose
)
19 int hole
, msgnum
, newcurrent
= 0;
20 char newmsg
[BUFSIZ
], oldmsg
[BUFSIZ
];
26 * Just return if folder is empty.
32 * Make sure we have message status space allocated
33 * for all numbers from 1 to current high message.
36 if ((mp
= folder_realloc (mp
, 1, mp
->hghmsg
)))
39 advise (NULL
, "unable to allocate folder storage");
44 for (msgnum
= mp
->lowmsg
, hole
= 1; msgnum
<= mp
->hghmsg
; msgnum
++) {
45 if (does_exist (mp
, msgnum
)) {
47 strncpy (newmsg
, m_name (hole
), sizeof(newmsg
));
48 strncpy (oldmsg
, m_name (msgnum
), sizeof(oldmsg
));
50 printf ("message %s becomes %s\n", oldmsg
, newmsg
);
52 /* move the message file */
53 if (rename (oldmsg
, newmsg
) == -1) {
54 advise (newmsg
, "unable to rename %s to", oldmsg
);
58 /* check if this is the current message */
59 if (msgnum
== mp
->curmsg
)
62 /* copy the attribute flags for this message */
63 copy_msg_flags (mp
, hole
, msgnum
);
65 if (msgnum
== mp
->lowsel
)
67 if (msgnum
== mp
->hghsel
)
70 /* mark that sequence information has been modified */
71 mp
->msgflags
|= SEQMOD
;
77 /* record the new number for the high/low message */
79 mp
->hghmsg
= hole
- 1;
81 /* update the "cur" sequence */
83 seq_setcur (mp
, newcurrent
);