3 * m_draft.c -- construct the name of a draft message
15 m_draft (char *folder, char *msg, int use, int *isdf)
18 register struct msgs *mp;
20 static char buffer[BUFSIZ];
22 if (*isdf == -1 || folder == NULL || *folder == '\0') {
23 if (*isdf == -1 || (cp = context_find ("Draft-Folder")) == NULL) {
25 return m_maildir (msg && *msg ? msg : draft);
27 folder = path (*cp == '+' || *cp == '@' ? cp + 1 : cp,
28 *cp != '@' ? TFOLDER : TSUBCWF);
33 chdir (m_maildir (""));
34 strncpy (buffer, m_maildir (folder), sizeof(buffer));
35 if (stat (buffer, &st) == -1) {
37 adios (buffer, "error on folder");
38 cp = concat ("Create folder \"", buffer, "\"? ", NULL);
42 if (!makedir (buffer))
43 adios (NULL, "unable to create folder %s", buffer);
46 if (chdir (buffer) == -1)
47 adios (buffer, "unable to change directory to");
49 if (!(mp = folder_read (folder)))
50 adios (NULL, "unable to read folder %s", folder);
53 * Make sure we have enough message status space for all
54 * the message numbers from 1 to "new", since we might
55 * select an empty slot. If we add more space at the
56 * end, go ahead and add 10 additional slots.
58 if (mp->hghmsg >= mp->hghoff) {
59 if (!(mp = folder_realloc (mp, 1, mp->hghmsg + 10)))
60 adios (NULL, "unable to allocate folder storage");
61 } else if (mp->lowoff > 1) {
62 if (!(mp = folder_realloc (mp, 1, mp->hghoff)))
63 adios (NULL, "unable to allocate folder storage");
66 mp->msgflags |= ALLOW_NEW; /* allow the "new" sequence */
69 * If we have been give a valid message name, then use that.
70 * Else, if we are given the "use" option, then use the
71 * current message. Else, use special sequence "new".
73 if (!m_convert (mp, msg && *msg ? msg : use ? "cur" : "new"))
78 adios (NULL, "only one message draft at a time!");
80 snprintf (buffer, sizeof(buffer), "%s/%s", mp->foldpath, m_name (mp->lowsel));
83 seq_setcur (mp, mp->lowsel);/* set current message for folder */
84 seq_save (mp); /* synchronize message sequences */
85 folder_free (mp); /* free folder/message structure */