X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/1691e80890e5d8ba258c51c214a3e91880e1db2b..1e03ea3338cc5ccd9ddf4feaaacfeda1998689cc:/sbr/m_draft.c?ds=sidebyside diff --git a/sbr/m_draft.c b/sbr/m_draft.c index 712e173d..6e662a1b 100644 --- a/sbr/m_draft.c +++ b/sbr/m_draft.c @@ -1,53 +1,55 @@ - -/* - * m_draft.c -- construct the name of a draft message +/* m_draft.c -- construct the name of a draft message * - * $Id$ + * 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 -#include - -extern int errno; +#include "h/mh.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 @@ -57,10 +59,10 @@ m_draft (char *folder, char *msg, int use, int *isdf) */ 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 */ @@ -75,7 +77,7 @@ m_draft (char *folder, char *msg, int use, int *isdf) 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;