3 * path.c -- return a pathname
11 #define NCWD (sizeof(CWD) - 1)
15 #define NPWD (sizeof(PWD) - 1)
22 static char *expath(char *,int);
23 static void compath(char *);
27 path(char *name, int flag)
29 register char *cp, *ep;
31 if ((cp = expath (name, flag))
32 && (ep = cp + strlen (cp) - 1) > cp
41 expath (char *name, int flag)
43 register char *cp, *ep;
46 if (flag == TSUBCWF) {
47 snprintf (buffer, sizeof(buffer), "%s/%s", getfolder (1), name);
48 name = m_mailpath (buffer);
50 snprintf (buffer, sizeof(buffer), "%s/", m_maildir (""));
51 if (ssequal (buffer, name)) {
53 name = getcpy (name + strlen (buffer));
61 && (strncmp (name, CWD, NCWD)
63 && strcmp (name, DOTDOT)
64 && strncmp (name, PWD, NPWD))))
70 if (strcmp (name, DOT) == 0 || strcmp (name, CWD) == 0)
73 ep = pwds + strlen (pwds);
74 if ((cp = strrchr(pwds, '/')) == NULL)
80 if (strncmp (name, CWD, NCWD) == 0)
83 if (strcmp (name, DOTDOT) == 0 || strcmp (name, PWD) == 0) {
84 snprintf (buffer, sizeof(buffer), "%.*s", cp - pwds, pwds);
85 return getcpy (buffer);
88 if (strncmp (name, PWD, NPWD) == 0)
93 snprintf (buffer, sizeof(buffer), "%.*s/%s", cp - pwds, pwds, name);
94 return getcpy (buffer);
101 register char *cp, *dp;
115 for (dp = cp; *dp == '/'; dp++)
121 if (strcmp (cp, DOT) == 0) {
127 if (strcmp (cp, DOTDOT) == 0) {
128 for (cp -= 2; cp > f; cp--)
136 if (strncmp (cp, PWD, NPWD) == 0) {
137 for (dp = cp - 2; dp > f; dp--)
142 strcpy (dp, cp + NPWD - 1);
146 if (strncmp (cp, CWD, NCWD) == 0) {
147 strcpy (cp - 1, cp + NCWD - 1);