Added all of the MH sources, including RCS files, in
[mmh] / docs / historical / mh-6.8.5 / sbr / m_maildir.c
1 /* m_maildir.c - get the path for the mail directory */
2 #ifndef lint
3 static char ident[] = "@(#)$Id: m_maildir.c,v 1.6 1992/12/15 00:20:22 jromine Exp $";
4 #endif  /* lint */
5
6 #include "../h/mh.h"
7 #include <stdio.h>
8
9 #define CWD     "./"
10 #define NCWD    (sizeof CWD - 1)
11 #define DOT     "."
12 #define DOTDOT  ".."
13 #define PWD     "../"
14 #define NPWD    (sizeof PWD - 1)
15
16
17 static char mailfold[BUFSIZ];
18
19 static char   *exmaildir ();
20
21
22 char   *m_maildir (folder)
23 register char   *folder;
24 {
25     register char  *cp,
26                    *ep;
27
28     if ((cp = exmaildir (folder))
29             && (ep = cp + strlen (cp) - 1) > cp
30             && *ep == '/')
31         *ep = 0;
32
33     return cp;
34 }
35
36 /* \f */
37
38 char   *m_mailpath (folder)
39 register char   *folder;
40 {
41     register char  *cp;
42     char    maildir[BUFSIZ];
43
44     if (*folder == '/'
45             || strncmp (folder, CWD, NCWD) == 0
46             || strcmp (folder, DOT) == 0
47             || strcmp (folder, DOTDOT) == 0
48             || strncmp (folder, PWD, NPWD) == 0)
49         cp = path (folder, TFOLDER);
50     else {
51         (void) strcpy (maildir, mailfold);/* preserve... */
52         cp = getcpy (m_maildir (folder));
53         (void) strcpy (mailfold, maildir);
54     }
55
56     return cp;
57 }
58
59 /* \f */
60
61 static char *exmaildir (folder)
62 register char   *folder;
63 {
64     register char  *cp,
65                    *pp;
66
67     if (folder == NULL)
68         folder = m_getfolder ();
69     if (*folder == '/'
70             || strncmp (folder, CWD, NCWD) == 0
71             || strcmp (folder, DOT) == 0
72             || strcmp (folder, DOTDOT) == 0
73             || strncmp (folder, PWD, NPWD) == 0) {
74         (void) strcpy (mailfold, folder);
75         return mailfold;
76     }
77
78     cp = mailfold;
79     if ((pp = m_find ("path")) != NULL && *pp) {
80         if (*pp != '/') {
81             (void) sprintf (cp, "%s/", mypath);
82             cp += strlen (cp);
83         }
84         cp = copy (pp, cp);
85     }
86     else
87         cp = copy (path ("./", TFOLDER), cp);
88     if (cp[-1] != '/')
89         *cp++ = '/';
90     (void) strcpy (cp, folder);
91
92     return mailfold;
93 }