int folder_addmsg(struct msgs **, char *, int, int, int, int, char *);
int folder_delmsgs(struct msgs *, int, int);
void folder_free(struct msgs *);
-int folder_pack(struct msgs **, int);
struct msgs *folder_read(char *);
struct msgs *folder_realloc(struct msgs *, int, int);
int gans(char *, struct swit *);
cpydata.c cpydgst.c crawl_folders.c \
discard.c done.c dtime.c dtimep.c \
error.c ext_hook.c folder_addmsg.c folder_delmsgs.c \
- folder_free.c folder_pack.c folder_read.c \
+ folder_free.c folder_read.c \
folder_realloc.c gans.c getans.c getanswer.c \
getarguments.c getcpy.c getpass.c \
fmt_addr.c fmt_compile.c fmt_new.c fmt_rfc2047.c \
+++ /dev/null
-/*
-** 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 <h/mh.h>
-
-/*
-** Pack the message in a folder.
-** Return -1 if error, else return 0.
-*/
-
-int
-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.
- */
-
- snprintf(oldmsg, sizeof (oldmsg), "%s/%d",
- mp->foldpath, msgnum);
- 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;
-
- if (newcurrent)
- seq_setcur(mp, newcurrent);
-
- return 0;
-}
static void print_folders(void);
static int sfold(struct msgs *, char *);
static void readonly_folders(void);
+static int folder_pack(struct msgs **, int);
int
/* Why do we exclude absolute path names? --meillo */
get_folder_info(np->n_name + atrlen, NULL);
}
+
+
+/*
+** pack (renumber) the messages in a folder
+** into a contiguous range from 1 to n.
+** Return -1 if error, else return 0.
+*/
+static int
+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.
+ */
+
+ snprintf(oldmsg, sizeof (oldmsg), "%s/%d",
+ mp->foldpath, msgnum);
+ 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;
+
+ if (newcurrent)
+ seq_setcur(mp, newcurrent);
+
+ return 0;
+}