X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/3dc0fe0bcb41205700cf9229cb6d7bbfd95a3c2a..0860f098b5a13f4e8bedb2d2da9d2df94717b4a5:/uip/refile.c diff --git a/uip/refile.c b/uip/refile.c index 205041e0..cbe61cdb 100644 --- a/uip/refile.c +++ b/uip/refile.c @@ -11,7 +11,6 @@ #include #include #include -#include #define REFILE_SWITCHES \ X("draft", 0, DRAFTSW) \ @@ -69,13 +68,7 @@ main (int argc, char **argv) struct msgs_array msgs = { 0, 0, NULL }; struct msgs *mp; -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex (argv[0], '/'); - - /* read user profile/context */ - context_read(); + if (nmh_init(argv[0], 1)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -174,11 +167,6 @@ main (int argc, char **argv) if (foldp == 0) adios (NULL, "no folder specified"); -#ifdef WHATNOW - if (!msgs.size && !foldp && !filep && (cp = getenv ("mhdraft")) && *cp) - files[filep++] = cp; -#endif /* WHATNOW */ - /* * We are refiling a file to the folders */ @@ -252,6 +240,14 @@ main (int argc, char **argv) && (mp->numsel != mp->nummsg || linkf)) seq_setcur (mp, mp->hghsel); + /* + * Close destination folders now; if we are using private sequences + * we need to have all of our calls to seq_save() complete before we + * call context_save(). + */ + + clsfolds (folders, foldp); + /* If -nolink, then "remove" messages from source folder. * * Note that folder_delmsgs does not call the delete hook @@ -264,8 +260,6 @@ main (int argc, char **argv) context_save (); /* save the context file */ } - clsfolds (folders, foldp); - folder_free (mp); /* free folder structure */ done (0); return 1; @@ -350,7 +344,7 @@ remove_files (int filep, char **files) /* Else just unlink the files */ files++; /* advance past filevec[0] */ for (i = 0; i < filep; i++) { - if (unlink (files[i]) == NOTOK) + if (m_unlink (files[i]) == NOTOK) admonish (files[i], "unable to unlink"); } } @@ -385,11 +379,13 @@ static void copy_seqs (struct msgs *oldmp, int oldmsgnum, struct msgs *newmp, int newmsgnum) { char **seq; - int seqnum; + size_t seqnum; - for (seq = oldmp->msgattrs, seqnum = 0; *seq; ++seq, ++seqnum) { + for (seq = svector_strs (oldmp->msgattrs), seqnum = 0; + *seq && seqnum < svector_size (oldmp->msgattrs); + ++seq, ++seqnum) { if (strcmp (current, *seq)) { - assert (seqnum == seq_getnum (oldmp, *seq)); + assert ((int) seqnum == seq_getnum (oldmp, *seq)); if (in_sequence (oldmp, seqnum, oldmsgnum)) { seq_addmsg (newmp, *seq, newmsgnum, is_seq_private (oldmp, seqnum) ? 0 : 1, 0);