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