3 * path.c -- return a pathname
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.
15 #define NCWD (sizeof(CWD) - 1)
19 #define NPWD (sizeof(PWD) - 1)
26 static char *expath(char *,int);
27 static void compath(char *);
31 path(char *name, int flag)
33 register char *cp, *ep;
35 if ((cp = expath (name, flag))
36 && (ep = cp + strlen (cp) - 1) > cp
45 expath (char *name, int flag)
47 register char *cp, *ep;
50 if (flag == TSUBCWF) {
51 snprintf (buffer, sizeof(buffer), "%s/%s", getfolder (1), name);
52 name = m_mailpath (buffer);
54 snprintf (buffer, sizeof(buffer), "%s/", m_maildir (""));
55 if (ssequal (buffer, name)) {
57 name = getcpy (name + strlen (buffer));
65 && (strncmp (name, CWD, NCWD)
67 && strcmp (name, DOTDOT)
68 && strncmp (name, PWD, NPWD))))
74 if (strcmp (name, DOT) == 0 || strcmp (name, CWD) == 0)
77 ep = pwds + strlen (pwds);
78 if ((cp = strrchr(pwds, '/')) == NULL)
84 if (strncmp (name, CWD, NCWD) == 0)
87 if (strcmp (name, DOTDOT) == 0 || strcmp (name, PWD) == 0) {
88 snprintf (buffer, sizeof(buffer), "%.*s", cp - pwds, pwds);
89 return getcpy (buffer);
92 if (strncmp (name, PWD, NPWD) == 0)
97 snprintf (buffer, sizeof(buffer), "%.*s/%s", cp - pwds, pwds, name);
98 return getcpy (buffer);
105 register char *cp, *dp;
119 for (dp = cp; *dp == '/'; dp++)
125 if (strcmp (cp, DOT) == 0) {
131 if (strcmp (cp, DOTDOT) == 0) {
132 for (cp -= 2; cp > f; cp--)
140 if (strncmp (cp, PWD, NPWD) == 0) {
141 for (dp = cp - 2; dp > f; dp--)
146 strcpy (dp, cp + NPWD - 1);
150 if (strncmp (cp, CWD, NCWD) == 0) {
151 strcpy (cp - 1, cp + NCWD - 1);