]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/sbr/m_maildir.c
Always check that mktemp()/mktemp2() succeeds before trying to
[nmh] / docs / historical / mh-6.8.5 / sbr / m_maildir.c
1 /* m_maildir.c - get the path for the mail directory */
2 #ifndef lint
3 static char ident[] = "@(#)$Id: m_maildir.c,v 1.6 1992/12/15 00:20:22 jromine Exp $";
4 #endif /* lint */
5
6 #include "../h/mh.h"
7 #include <stdio.h>
8
9 #define CWD "./"
10 #define NCWD (sizeof CWD - 1)
11 #define DOT "."
12 #define DOTDOT ".."
13 #define PWD "../"
14 #define NPWD (sizeof PWD - 1)
15
16
17 static char mailfold[BUFSIZ];
18
19 static char *exmaildir ();
20
21
22 char *m_maildir (folder)
23 register char *folder;
24 {
25 register char *cp,
26 *ep;
27
28 if ((cp = exmaildir (folder))
29 && (ep = cp + strlen (cp) - 1) > cp
30 && *ep == '/')
31 *ep = 0;
32
33 return cp;
34 }
35
36 /* \f */
37
38 char *m_mailpath (folder)
39 register char *folder;
40 {
41 register char *cp;
42 char maildir[BUFSIZ];
43
44 if (*folder == '/'
45 || strncmp (folder, CWD, NCWD) == 0
46 || strcmp (folder, DOT) == 0
47 || strcmp (folder, DOTDOT) == 0
48 || strncmp (folder, PWD, NPWD) == 0)
49 cp = path (folder, TFOLDER);
50 else {
51 (void) strcpy (maildir, mailfold);/* preserve... */
52 cp = getcpy (m_maildir (folder));
53 (void) strcpy (mailfold, maildir);
54 }
55
56 return cp;
57 }
58
59 /* \f */
60
61 static char *exmaildir (folder)
62 register char *folder;
63 {
64 register char *cp,
65 *pp;
66
67 if (folder == NULL)
68 folder = m_getfolder ();
69 if (*folder == '/'
70 || strncmp (folder, CWD, NCWD) == 0
71 || strcmp (folder, DOT) == 0
72 || strcmp (folder, DOTDOT) == 0
73 || strncmp (folder, PWD, NPWD) == 0) {
74 (void) strcpy (mailfold, folder);
75 return mailfold;
76 }
77
78 cp = mailfold;
79 if ((pp = m_find ("path")) != NULL && *pp) {
80 if (*pp != '/') {
81 (void) sprintf (cp, "%s/", mypath);
82 cp += strlen (cp);
83 }
84 cp = copy (pp, cp);
85 }
86 else
87 cp = copy (path ("./", TFOLDER), cp);
88 if (cp[-1] != '/')
89 *cp++ = '/';
90 (void) strcpy (cp, folder);
91
92 return mailfold;
93 }