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