X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=sbr%2Fcontext_save.c;h=d4a56edc624d7d26a162449d810cbc843774e3b5;hb=18017df38ebb626f6eed6f339641fd1298c326e7;hp=b3f8168bed12c7ec6d6f9ee940c577166c02011f;hpb=1691e80890e5d8ba258c51c214a3e91880e1db2b;p=mmh diff --git a/sbr/context_save.c b/sbr/context_save.c index b3f8168..d4a56ed 100644 --- a/sbr/context_save.c +++ b/sbr/context_save.c @@ -1,8 +1,9 @@ - /* * context_save.c -- write out the updated context file * - * $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 @@ -17,37 +18,41 @@ static int m_chkids(void); void context_save (void) { - int action; - register struct node *np; - FILE *out; - sigset_t set, oset; - - if (!(ctxflags & CTXMOD)) - return; - ctxflags &= ~CTXMOD; - - if ((action = m_chkids ()) > 0) - return; /* child did it for us */ - - /* block a few signals */ - sigemptyset (&set); - sigaddset (&set, SIGHUP); - sigaddset (&set, SIGINT); - sigaddset (&set, SIGQUIT); - sigaddset (&set, SIGTERM); - SIGPROCMASK (SIG_BLOCK, &set, &oset); - - if (!(out = fopen (ctxpath, "w"))) - adios (ctxpath, "unable to write"); - for (np = m_defs; np; np = np->n_next) - if (np->n_context) - fprintf (out, "%s: %s\n", np->n_name, np->n_field); - fclose (out); - - SIGPROCMASK (SIG_SETMASK, &oset, &set); /* reset the signal mask */ - - if (action == 0) - _exit (0); /* we are child, time to die */ + int action; + register struct node *np; + FILE *out; + sigset_t set, oset; + + /* No context in use -- silently ignore any changes! */ + if (!ctxpath) + return; + + if (!(ctxflags & CTXMOD)) + return; + ctxflags &= ~CTXMOD; + + if ((action = m_chkids ()) > 0) + return; /* child did it for us */ + + /* block a few signals */ + sigemptyset (&set); + sigaddset (&set, SIGHUP); + sigaddset (&set, SIGINT); + sigaddset (&set, SIGQUIT); + sigaddset (&set, SIGTERM); + SIGPROCMASK (SIG_BLOCK, &set, &oset); + + if (!(out = lkfopen (ctxpath, "w"))) + adios (ctxpath, "unable to write"); + for (np = m_defs; np; np = np->n_next) + if (np->n_context) + fprintf (out, "%s: %s\n", np->n_name, np->n_field); + lkfclose (out, ctxpath); + + SIGPROCMASK (SIG_SETMASK, &oset, &set); /* reset the signal mask */ + + if (action == 0) + _exit (0); /* we are child, time to die */ } /* @@ -63,28 +68,28 @@ context_save (void) static int m_chkids (void) { - int i; - pid_t pid; + int i; + pid_t pid; - if (getuid () == geteuid ()) - return (-1); + if (getuid () == geteuid ()) + return (-1); - for (i = 0; (pid = fork ()) == -1 && i < 5; i++) - sleep (5); + for (i = 0; (pid = fork ()) == -1 && i < 5; i++) + sleep (5); - switch (pid) { - case -1: - break; + switch (pid) { + case -1: + break; - case 0: - setgid (getgid ()); - setuid (getuid ()); - break; + case 0: + setgid (getgid ()); + setuid (getuid ()); + break; - default: - pidwait (pid, -1); - break; - } + default: + pidwait (pid, -1); + break; + } - return pid; + return pid; }