]> diplodocus.org Git - nmh/blob - sbr/m_maildir.c
Fix stupid accidental dependence on a bash quirk in previous
[nmh] / 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 }