X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fpath.c;h=fd05f3469d955ea9f97639e7a325950365895e9b;hp=ca3595a15919fb96e13d09c3857aef7f8f2f8072;hb=b4c29794c12099556151d93a860ee51badae2e35;hpb=ff99b7b6299a8ebe433a31f7bf15b158e9dcdea8 diff --git a/sbr/path.c b/sbr/path.c index ca3595a..fd05f34 100644 --- a/sbr/path.c +++ b/sbr/path.c @@ -7,6 +7,68 @@ */ #include +#include + +extern char *mhetcdir; + + +/* +** Find the location of a format or configuration +** file, and return its absolute pathname. +** +** 1) If it begins with ~user, then expand it. +** 2) Next, if already absolute pathname, then leave unchanged. +** 3) Next, check in nmh Mail directory. +** 4) Next, check in nmh `etc' directory. +*/ +char * +etcpath(char *file) +{ + static char epath[PATH_MAX]; + char *cp; + char *pp; + struct passwd *pw; + + context_read(); + if (*file == '~') { + /* Expand `~user' */ + if ((cp = strchr(pp = file + 1, '/'))) + *cp++ = '\0'; + if (*pp == '\0') { + pp = mypath; + } else { + if ((pw = getpwnam(pp))) + pp = pw->pw_dir; + else { + if (cp) + *--cp = '/'; + goto try_it; + } + } + + snprintf(epath, sizeof epath, "%s/%s", pp, cp ? cp : ""); + if (cp) + *--cp = '/'; + + if (access(epath, R_OK) != NOTOK) + return epath; /* else fall */ + } + +try_it: + if (*file == '/') { + /* absolute pathname, return it */ + return file; + } + + /* Check nmh Mail directory */ + strncpy(epath, toabsdir(file), sizeof epath); + if (access(epath, R_OK) != NOTOK) + return epath; + + /* Check nmh `etc' directory */ + snprintf(epath, sizeof epath, "%s/%s", mhetcdir, file); + return (access(epath, R_OK) != NOTOK ? epath : file); +} /*