X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fm_draft.c;h=845fb9618c878f6bd987e3b940f5776bd2840dfb;hb=ced6090a330d3d83d0bce709f756aa3d7d65fea4;hp=712e173d0325cce5755e49e92444970696d622e5;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b;p=mmh diff --git a/sbr/m_draft.c b/sbr/m_draft.c index 712e173..845fb96 100644 --- a/sbr/m_draft.c +++ b/sbr/m_draft.c @@ -1,88 +1,73 @@ - /* - * 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 +#include #include -extern int errno; - +/* +** `which' should either be "cur" to use the current draft +** or "new" 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 stat st; - static char buffer[BUFSIZ]; + register char *cp; + register 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); - } - } - *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); - } + cp = draftfolder; + folder = path (*cp == '+' || *cp == '@' ? cp + 1 : cp, + *cp != '@' ? TFOLDER : TSUBCWF); - if (chdir (buffer) == -1) - adios (buffer, "unable to change directory to"); + chdir (m_maildir ("")); + strncpy (buffer, m_maildir (folder), sizeof(buffer)); - if (!(mp = folder_read (folder))) - adios (NULL, "unable to read folder %s", folder); + create_folder (buffer, 0, done); - /* - * 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. - */ - if (mp->hghmsg >= mp->hghoff) { - if (!(mp = folder_realloc (mp, 1, mp->hghmsg + 10))) - adios (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 (chdir (buffer) == -1) + adios (buffer, "unable to change directory to"); - mp->msgflags |= ALLOW_NEW; /* allow the "new" sequence */ + if (!(mp = folder_read (folder))) + adios (NULL, "unable to read folder %s", folder); - /* - * 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); + /* + ** 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. + */ + if (mp->hghmsg >= mp->hghoff) { + if (!(mp = folder_realloc (mp, 1, mp->hghmsg + 10))) + adios (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->numsel > 1) - adios (NULL, "only one message draft at a time!"); + mp->msgflags |= ALLOW_NEW; /* allow the "new" sequence */ - 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 "cur" (for the current draft) or "new" + ** (to start a new draft). + */ + if (!m_convert (mp, which)) + done (1); + 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; }