]>
diplodocus.org Git - nmh/blob - sbr/path.c
5505451e9e381cc7d884ee18e345e276099f3299
1 /* path.c -- return a pathname
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.
12 #include "m_maildir.h"
24 static char *expath(char *,int);
25 static void compath(char *);
28 /* Return value must be free(3)'d. */
32 return path(name
+ 1, *name
== '+' ? TFOLDER
: TSUBCWF
);
36 /* Return value must be free(3)'d. */
38 path(char *name
, int flag
)
42 p
= expath(name
, flag
);
43 last
= p
+ strlen(p
) - 1;
44 if (last
> p
&& *last
== '/')
51 /* Return value must be free(3)'d. */
53 expath (char *name
, int flag
)
58 if (flag
== TSUBCWF
) {
59 snprintf (buffer
, sizeof(buffer
), "%s/%s", getfolder (1), name
);
60 name
= m_mailpath (buffer
);
62 snprintf (buffer
, sizeof(buffer
), "%s/", m_maildir (""));
63 if (ssequal (buffer
, name
)) {
65 name
= mh_xstrdup(name
+ strlen(buffer
));
73 && (!has_prefix(name
, CWD
)
75 && strcmp (name
, DOTDOT
)
76 && !has_prefix(name
, PWD
))))
77 return mh_xstrdup(name
);
82 if (strcmp (name
, DOT
) == 0 || strcmp (name
, CWD
) == 0)
83 return mh_xstrdup(pwds
);
85 ep
= pwds
+ strlen (pwds
);
86 if ((cp
= strrchr(pwds
, '/')) == NULL
)
91 if (has_prefix(name
, CWD
))
94 if (strcmp (name
, DOTDOT
) == 0 || strcmp (name
, PWD
) == 0) {
95 snprintf (buffer
, sizeof(buffer
), "%.*s", (int)(cp
- pwds
), pwds
);
96 return mh_xstrdup(buffer
);
99 if (has_prefix(name
, PWD
))
104 snprintf (buffer
, sizeof(buffer
), "%.*s/%s", (int)(cp
- pwds
), pwds
, name
);
105 return mh_xstrdup(buffer
);
130 for (dp
= cp
; *dp
== '/'; dp
++)
136 if (strcmp (cp
, DOT
) == 0) {
142 if (strcmp (cp
, DOTDOT
) == 0) {
143 for (cp
-= 2; cp
> f
; cp
--)
151 if (has_prefix(cp
, PWD
)) {
152 for (dp
= cp
- 2; dp
> f
; dp
--)
157 strcpy (dp
, cp
+ LEN(PWD
) - 1);
161 if (has_prefix(cp
, CWD
)) {
162 strcpy (cp
- 1, cp
+ LEN(CWD
) - 1);