Reformated comments and long lines
[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(1);
70
71         if (!(*folder != '/'
72                 && strncmp (folder, CWD, NCWD)
73                 && strcmp (folder, DOT)
74                 && strcmp (folder, DOTDOT)
75                 && strncmp (folder, PWD, NPWD))) {
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                         sprintf (cp, "%s/", mypath);
84                         cp += strlen (cp);
85                 }
86                 cp = copy (pp, cp);
87         } else {
88                 cp = copy (path ("./", TFOLDER), cp);
89         }
90         if (cp[-1] != '/')
91                 *cp++ = '/';
92         strcpy (cp, folder);
93
94         return mailfold;
95 }