]> diplodocus.org Git - nmh/blob - sbr/m_maildir.c
Escape literal leading full stop in man/new.man.
[nmh] / sbr / m_maildir.c
1
2 /*
3 * m_maildir.c -- get the path for the mail directory
4 *
5 * This code is Copyright (c) 2002, by the authors of nmh. See the
6 * COPYRIGHT file in the root directory of the nmh distribution for
7 * complete copyright information.
8 */
9
10 #include <h/mh.h>
11 #include <h/utils.h>
12
13 #define CWD "./"
14 #define DOT "."
15 #define DOTDOT ".."
16 #define PWD "../"
17
18 static char mailfold[BUFSIZ];
19
20 /*
21 * static prototypes
22 */
23 static char *exmaildir (char *);
24
25
26 char *
27 m_maildir (char *folder)
28 {
29 char *cp, *ep;
30
31 if ((cp = exmaildir (folder))
32 && (ep = cp + strlen (cp) - 1) > cp
33 && *ep == '/')
34 *ep = '\0';
35
36 return cp;
37 }
38
39
40 char *
41 m_mailpath (char *folder)
42 {
43 char *cp;
44 char maildir[BUFSIZ];
45
46 if (*folder != '/'
47 && !has_prefix(folder, CWD)
48 && strcmp (folder, DOT)
49 && strcmp (folder, DOTDOT)
50 && !has_prefix(folder, PWD)) {
51 strncpy (maildir, mailfold, sizeof(maildir)); /* preserve... */
52 cp = getcpy (m_maildir (folder));
53 strncpy (mailfold, maildir, sizeof(mailfold));
54 } else {
55 cp = path (folder, TFOLDER);
56 }
57
58 return cp;
59 }
60
61
62 static char *
63 exmaildir (char *folder)
64 {
65 char *cp, *pp;
66
67 /* use current folder if none is specified */
68 if (folder == NULL)
69 folder = getfolder(1);
70
71 if (!(*folder != '/'
72 && !has_prefix(folder, CWD)
73 && strcmp (folder, DOT)
74 && strcmp (folder, DOTDOT)
75 && !has_prefix(folder, PWD))) {
76 strncpy (mailfold, folder, sizeof(mailfold));
77 return mailfold;
78 }
79
80 cp = mailfold;
81 if ((pp = context_find ("path")) && *pp) {
82 if (*pp != '/') {
83 snprintf(cp, sizeof mailfold, "%s/", mypath);
84 cp += strlen (cp);
85 }
86 cp = stpcpy(cp, pp);
87 } else {
88 cp = stpcpy(cp, path("./", TFOLDER));
89 }
90 if (cp[-1] != '/')
91 *cp++ = '/';
92 strcpy (cp, folder);
93
94 return mailfold;
95 }