File: m_draft.c

package info (click to toggle)
mmh 0.4-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 4,976 kB
  • sloc: ansic: 26,132; sh: 6,871; makefile: 680; awk: 74
file content (65 lines) | stat: -rw-r--r-- 1,725 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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.
*/

#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 *which)
{
	struct msgs *mp;
	static char buffer[BUFSIZ];
	char *folder;

	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);
	}
	mh_free0(&folder);

	/*
	** 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(EX_OSERR, NULL, "unable to allocate folder storage");
	} else if (mp->lowoff > 1) {
		if (!(mp = folder_realloc(mp, 1, mp->hghoff)))
			adios(EX_OSERR, NULL, "unable to allocate folder storage");
	}

	mp->msgflags |= ALLOW_BEYOND;  /* allow the beyond sequence */

	/*
	** 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);

	snprintf(buffer, sizeof(buffer), "%s/%s", mp->foldpath,
			m_name(mp->lowsel));
	seq_setcur(mp, mp->lowsel);
	seq_save(mp);
	folder_free(mp);

	return buffer;
}