/*
* context_read.c -- find and read profile and context files
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
#include <errno.h> /* system call errors */
#include <pwd.h> /* structure for getpwuid() results */
-extern int errno; /* system call error number */
-
void
context_read (void)
{
register FILE *ib; /* profile and context file pointer */
/*
+ * If this routine _is_ called again (despite the wanings in the
+ * comments above), return immediately.
+ */
+ if ( m_defs != 0 )
+ return;
+
+ /*
* Find user's home directory. Try the HOME environment variable first,
* the home directory field in the password file if that's not found.
*/
free (cp);
if (!makedir (nd))
- adios (NULL, "unable to create", nd);
+ adios (NULL, "unable to create %s", nd);
}
else if ((st.st_mode & S_IFDIR) == 0)
if ((cp = getenv ("MHCONTEXT")) == (char *)0 || *cp == '\0')
cp = context;
+ /* context is NULL if context_foil() was called to disable use of context
+ * We also support users setting explicitly setting MHCONTEXT to /dev/null.
+ * (if this wasn't specialcased then the locking would be liable to fail)
+ */
+ if (!cp || (strcmp(cp,"/dev/null") == 0)) {
+ ctxpath = NULL;
+ return;
+ }
+
ctxpath = getcpy (m_maildir (cp));
- if ((ib = fopen (ctxpath, "r"))) {
+ if ((ib = lkfopen (ctxpath, "r"))) {
readconfig ((struct node **) 0, ib, cp, 1);
- fclose (ib);
+ lkfclose (ib, ctxpath);
}
return;