Cosmetic refactoring
[mmh] / sbr / m_maildir.c
1 /*
2 ** m_maildir.c -- get the path for the mail directory
3 **
4 ** This code is Copyright (c) 2002, by the authors of nmh.  See the
5 ** COPYRIGHT file in the root directory of the nmh distribution for
6 ** complete copyright information.
7 */
8
9 #include <h/mh.h>
10
11 #define CWD     "./"
12 #define NCWD    (sizeof(CWD) - 1)
13 #define DOT     "."
14 #define DOTDOT  ".."
15 #define PWD     "../"
16 #define NPWD    (sizeof(PWD) - 1)
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         register 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         register char *cp;
44         char maildir[BUFSIZ];
45
46         if (*folder != '/'
47                 && strncmp(folder, CWD, NCWD)
48                 && strcmp(folder, DOT)
49                 && strcmp(folder, DOTDOT)
50                 && strncmp(folder, PWD, NPWD)) {
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         register char *cp, *pp;
66
67         /* use current folder if none is specified */
68         if (folder == NULL)
69                 folder = getfolder(FCUR);
70
71         if (!(*folder != '/' && strncmp(folder, CWD, NCWD)
72                         && strcmp(folder, DOT) && strcmp(folder, DOTDOT)
73                         && strncmp(folder, PWD, NPWD))) {
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                         sprintf(cp, "%s/", mypath);
82                         cp += strlen(cp);
83                 }
84                 cp = copy(pp, cp);
85         } else {
86                 cp = copy(path("./", TFOLDER), cp);
87         }
88         if (cp[-1] != '/')
89                 *cp++ = '/';
90         strcpy(cp, folder);
91
92         return mailfold;
93 }