X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffolder_pack.c;h=5280e30a393be943a90110bb578a5c7af3362763;hp=b0bc67b3b249907c4e1ed1ebfc71bf354ea980a3;hb=714b5c530ece27ea2835a313013f5b770163403c;hpb=5dd6771b28c257af405d7248639ed0e3bcdce38b diff --git a/sbr/folder_pack.c b/sbr/folder_pack.c index b0bc67b..5280e30 100644 --- a/sbr/folder_pack.c +++ b/sbr/folder_pack.c @@ -1,98 +1,101 @@ - /* - * folder_pack.c -- pack (renumber) the messages in a folder - * -- into a contiguous range from 1 to n. - * - * 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. - */ +** folder_pack.c -- pack (renumber) the messages in a folder +** -- into a contiguous range from 1 to n. +** +** 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. +*/ #include /* - * Pack the message in a folder. - * Return -1 if error, else return 0. - */ +** Pack the message in a folder. +** Return -1 if error, else return 0. +*/ int -folder_pack (struct msgs **mpp, int verbose) +folder_pack(struct msgs **mpp, int verbose) { - int hole, msgnum, newcurrent = 0; - char newmsg[BUFSIZ], oldmsg[BUFSIZ]; - struct msgs *mp; - - mp = *mpp; - - /* - * Just return if folder is empty. - */ - if (mp->nummsg == 0) - return 0; - - /* - * Make sure we have message status space allocated - * for all numbers from 1 to current high message. - */ - if (mp->lowoff > 1) { - if ((mp = folder_realloc (mp, 1, mp->hghmsg))) - *mpp = mp; - else { - advise (NULL, "unable to allocate folder storage"); - return -1; - } - } - - for (msgnum = mp->lowmsg, hole = 1; msgnum <= mp->hghmsg; msgnum++) { - if (does_exist (mp, msgnum)) { - if (msgnum != hole) { - strncpy (newmsg, m_name (hole), sizeof(newmsg)); - strncpy (oldmsg, m_name (msgnum), sizeof(oldmsg)); - if (verbose) - printf ("message %s becomes %s\n", oldmsg, newmsg); - - /* - * Invoke the external refile hook for each message being renamed. - * This is done before the file is renamed so that the old message - * file is around for the hook. - */ - - (void)snprintf(oldmsg, sizeof (oldmsg), "%s/%d", mp->foldpath, msgnum); - (void)snprintf(newmsg, sizeof (newmsg), "%s/%d", mp->foldpath, hole); - ext_hook("ref-hook", oldmsg, newmsg); - - /* move the message file */ - if (rename (oldmsg, newmsg) == -1) { - advise (newmsg, "unable to rename %s to", oldmsg); - return -1; + int hole, msgnum, newcurrent = 0; + char newmsg[BUFSIZ], oldmsg[BUFSIZ]; + struct msgs *mp; + + mp = *mpp; + + /* + ** Just return if folder is empty. + */ + if (mp->nummsg == 0) + return 0; + + /* + ** Make sure we have message status space allocated + ** for all numbers from 1 to current high message. + */ + if (mp->lowoff > 1) { + if ((mp = folder_realloc(mp, 1, mp->hghmsg))) + *mpp = mp; + else { + advise(NULL, "unable to allocate folder storage"); + return -1; } + } - /* check if this is the current message */ - if (msgnum == mp->curmsg) - newcurrent = hole; - - /* copy the attribute flags for this message */ - copy_msg_flags (mp, hole, msgnum); - - if (msgnum == mp->lowsel) - mp->lowsel = hole; - if (msgnum == mp->hghsel) - mp->hghsel = hole; - - /* mark that sequence information has been modified */ - mp->msgflags |= SEQMOD; - } - hole++; + for (msgnum = mp->lowmsg, hole = 1; msgnum <= mp->hghmsg; msgnum++) { + if (does_exist(mp, msgnum)) { + if (msgnum != hole) { + strncpy(newmsg, m_name(hole), sizeof(newmsg)); + strncpy(oldmsg, m_name(msgnum), sizeof(oldmsg)); + if (verbose) + printf("message %s becomes %s\n", oldmsg, newmsg); + + /* + ** Invoke the external refile hook for each + ** message being renamed. This is done + ** before the file is renamed so that the + ** old message file is around for the hook. + */ + + (void)snprintf(oldmsg, sizeof (oldmsg), "%s/%d", mp->foldpath, msgnum); + (void)snprintf(newmsg, sizeof (newmsg), "%s/%d", mp->foldpath, hole); + ext_hook("ref-hook", oldmsg, newmsg); + + /* move the message file */ + if (rename(oldmsg, newmsg) == -1) { + advise(newmsg, "unable to rename %s to", oldmsg); + return -1; + } + + /* check if this is the current message */ + if (msgnum == mp->curmsg) + newcurrent = hole; + + /* copy the attribute flags for this message */ + copy_msg_flags(mp, hole, msgnum); + + if (msgnum == mp->lowsel) + mp->lowsel = hole; + if (msgnum == mp->hghsel) + mp->hghsel = hole; + + /* + ** mark that sequence information has + ** been modified + */ + mp->msgflags |= SEQMOD; + } + hole++; + } } - } - /* record the new number for the high/low message */ - mp->lowmsg = 1; - mp->hghmsg = hole - 1; + /* record the new number for the high/low message */ + mp->lowmsg = 1; + mp->hghmsg = hole - 1; - /* update the "cur" sequence */ - if (newcurrent != 0) - seq_setcur (mp, newcurrent); + /* update the "cur" sequence */ + if (newcurrent != 0) + seq_setcur(mp, newcurrent); - return 0; + return 0; }