Fix spelling and encoding errors in manpages and an error message
[mmh] / sbr / m_draft.c
index ceee73a..ee85790 100644 (file)
@@ -1,79 +1,65 @@
 /*
- * m_draft.c -- construct the name of a draft message
- *
- * 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.
- */
+** m_draft.c -- construct the name of a draft message
+**
+** 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>
 #include <h/utils.h>
 #include <errno.h>
+#include <sysexits.h>
 
 
+/*
+**  `which' should either be the cur sequence to use the current draft
+**  or the beyond sequence to start with a new draft.
+*/
 char *
-m_draft (char *folder, char *msg, int use, int *isdf)
+m_draft(char *which)
 {
-       register char *cp;
-       register struct msgs *mp;
+       struct msgs *mp;
        static char buffer[BUFSIZ];
+       char *folder;
 
-       if (*isdf == -1 || folder == NULL || *folder == '\0') {
-               if (*isdf == -1 || (cp = context_find ("Draft-Folder")) == NULL) {
-                       *isdf = 0;
-                       return m_maildir (msg && *msg ? msg : draft);
-               } else {
-                       folder = path (*cp == '+' || *cp == '@' ? cp + 1 : cp,
-                                       *cp != '@' ? TFOLDER : TSUBCWF);
-               }
+       folder = mh_xstrdup(toabsdir(draftfolder));
+       create_folder(folder, 0, exit);
+       if (!(mp = folder_read(folder))) {
+               adios(EX_IOERR, NULL, "unable to read folder %s", folder);
        }
-       *isdf = 1;
-
-       chdir (m_maildir (""));
-       strncpy (buffer, m_maildir (folder), sizeof(buffer));
-
-       create_folder (buffer, 0, done);
-
-       if (chdir (buffer) == -1)
-               adios (buffer, "unable to change directory to");
-
-       if (!(mp = folder_read (folder)))
-               adios (NULL, "unable to read folder %s", folder);
+       mh_free0(&folder);
 
        /*
-        * Make sure we have enough message status space for all
-        * the message numbers from 1 to "new", since we might
-        * select an empty slot.  If we add more space at the
-        * end, go ahead and add 10 additional slots.
-        */
+       ** Make sure we have enough message status space for all
+       ** the message numbers from 1 to one beyond last, since we might
+       ** select an empty slot.  If we add more space at the
+       ** end, go ahead and add 10 additional slots.
+       */
        if (mp->hghmsg >= mp->hghoff) {
-               if (!(mp = folder_realloc (mp, 1, mp->hghmsg + 10)))
-                       adios (NULL, "unable to allocate folder storage");
+               if (!(mp = folder_realloc(mp, 1, mp->hghmsg + 10)))
+                       adios(EX_OSERR, NULL, "unable to allocate folder storage");
        } else if (mp->lowoff > 1) {
-               if (!(mp = folder_realloc (mp, 1, mp->hghoff)))
-                       adios (NULL, "unable to allocate folder storage");
+               if (!(mp = folder_realloc(mp, 1, mp->hghoff)))
+                       adios(EX_OSERR, NULL, "unable to allocate folder storage");
        }
 
-       mp->msgflags |= ALLOW_NEW;  /* allow the "new" sequence */
+       mp->msgflags |= ALLOW_BEYOND;  /* allow the beyond sequence */
 
        /*
-        * If we have been give a valid message name, then use that.
-        * Else, if we are given the "use" option, then use the
-        * current message.  Else, use special sequence "new".
-        */
-       if (!m_convert (mp, msg && *msg ? msg : use ? "cur" : "new"))
-               done (1);
-       seq_setprev (mp);
-
-       if (mp->numsel > 1)
-               adios (NULL, "only one message draft at a time!");
-
-       snprintf (buffer, sizeof(buffer), "%s/%s", mp->foldpath, m_name (mp->lowsel));
-       cp = buffer;
+       ** The draft message name to return is defined by `which'.
+       ** Usually it is seq_cur (for the current draft) or seq_beyond
+       ** (to start a new draft).
+       */
+       if (!m_convert(mp, which))
+               exit(EX_SOFTWARE);
+       seq_setprev(mp);
 
-       seq_setcur (mp, mp->lowsel);/* set current message for folder */
-       seq_save (mp);  /* synchronize message sequences  */
-       folder_free (mp);  /* free folder/message structure  */
+       snprintf(buffer, sizeof(buffer), "%s/%s", mp->foldpath,
+                       m_name(mp->lowsel));
+       seq_setcur(mp, mp->lowsel);
+       seq_save(mp);
+       folder_free(mp);
 
-       return cp;
+       return buffer;
 }