-
-/*
- * m_draft.c -- construct the name of a draft message
- *
- * $Id$
+/* 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 <errno.h>
+#include "h/mh.h"
+#include "m_name.h"
+#include "seq_setprev.h"
+#include "seq_setcur.h"
+#include "seq_save.h"
+#include "m_draft.h"
+#include "m_convert.h"
+#include "folder_read.h"
+#include "folder_realloc.h"
+#include "folder_free.h"
+#include "context_find.h"
+#include "path.h"
+#include "error.h"
+#include "h/utils.h"
+#include "m_maildir.h"
+#include "h/done.h"
+/* Does not return NULL. */
char *
m_draft (char *folder, char *msg, int use, int *isdf)
{
- register char *cp;
- register struct msgs *mp;
- struct stat st;
+ char *cp;
+ struct msgs *mp;
static char buffer[BUFSIZ];
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 = path (*cp == '+' || *cp == '@' ? cp + 1 : cp,
+ *cp != '@' ? TFOLDER : TSUBCWF);
}
*isdf = 1;
- chdir (m_maildir (""));
- strncpy (buffer, m_maildir (folder), sizeof(buffer));
- if (stat (buffer, &st) == -1) {
- if (errno != ENOENT)
- adios (buffer, "error on folder");
- cp = concat ("Create folder \"", buffer, "\"? ", NULL);
- if (!getanswer (cp))
- done (0);
- free (cp);
- if (!makedir (buffer))
- adios (NULL, "unable to create folder %s", buffer);
+ if (chdir (m_maildir ("")) < 0) {
+ advise (m_maildir (""), "chdir");
}
+ 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);
+ if (!(mp = folder_read (folder, 1)))
+ die("unable to read folder %s", folder);
/*
* Make sure we have enough message status space for all
*/
if (mp->hghmsg >= mp->hghoff) {
if (!(mp = folder_realloc (mp, 1, mp->hghmsg + 10)))
- adios (NULL, "unable to allocate folder storage");
+ die("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");
+ die("unable to allocate folder storage");
}
mp->msgflags |= ALLOW_NEW; /* allow the "new" sequence */
seq_setprev (mp);
if (mp->numsel > 1)
- adios (NULL, "only one message draft at a time!");
+ die("only one message draft at a time!");
snprintf (buffer, sizeof(buffer), "%s/%s", mp->foldpath, m_name (mp->lowsel));
cp = buffer;