New changes: Sender: cannot be blank, Sender: always overrides From:
[mmh] / 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
12 #define CWD     "./"
13 #define NCWD    (sizeof(CWD) - 1)
14 #define DOT     "."
15 #define DOTDOT  ".."
16 #define PWD     "../"
17 #define NPWD    (sizeof(PWD) - 1)
18
19 static char mailfold[BUFSIZ];
20
21 /*
22  * static prototypes
23  */
24 static char *exmaildir (char *);
25
26
27 char *
28 m_maildir (char *folder)
29 {
30     register char *cp, *ep;
31
32     if ((cp = exmaildir (folder))
33             && (ep = cp + strlen (cp) - 1) > cp
34             && *ep == '/')
35         *ep = '\0';
36
37     return cp;
38 }
39
40
41 char *
42 m_mailpath (char *folder)
43 {
44     register char *cp;
45     char maildir[BUFSIZ];
46
47     if (*folder != '/'
48             && strncmp (folder, CWD, NCWD)
49             && strcmp (folder, DOT)
50             && strcmp (folder, DOTDOT)
51             && strncmp (folder, PWD, NPWD)) {
52         strncpy (maildir, mailfold, sizeof(maildir));   /* preserve... */
53         cp = getcpy (m_maildir (folder));
54         strncpy (mailfold, maildir, sizeof(mailfold));
55     } else {
56         cp = path (folder, TFOLDER);
57     }
58
59     return cp;
60 }
61
62
63 static char *
64 exmaildir (char *folder)
65 {
66     register char *cp, *pp;
67
68     /* use current folder if none is specified */
69     if (folder == NULL)
70         folder = getfolder(1);
71
72     if (!(*folder != '/'
73             && strncmp (folder, CWD, NCWD)
74             && strcmp (folder, DOT)
75             && strcmp (folder, DOTDOT)
76             && strncmp (folder, PWD, NPWD))) {
77         strncpy (mailfold, folder, sizeof(mailfold));
78         return mailfold;
79     }
80
81     cp = mailfold;
82     if ((pp = context_find ("path")) && *pp) {
83         if (*pp != '/') {
84             sprintf (cp, "%s/", mypath);
85             cp += strlen (cp);
86         }
87         cp = copy (pp, cp);
88     } else {
89         cp = copy (path ("./", TFOLDER), cp);
90     }
91     if (cp[-1] != '/')
92         *cp++ = '/';
93     strcpy (cp, folder);
94
95     return mailfold;
96 }