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