diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-02-17 05:16:49 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-02-17 05:16:49 +0000 |
commit | f40473668438eaba88eced8d4e78db1225e90542 (patch) | |
tree | c8a55e212d39c880faba7fd1295ad9b4fdb0d6c3 /nscd | |
parent | f04b9a68febb179fc90095ae4f9fb2b7ec68a901 (diff) | |
download | glibc-f40473668438eaba88eced8d4e78db1225e90542.zip glibc-f40473668438eaba88eced8d4e78db1225e90542.tar.gz glibc-f40473668438eaba88eced8d4e78db1225e90542.tar.bz2 |
[BZ #18]
Update.
* nscd/nscd_conf.c (nscd_parse_file): Little optimization.
2004-02-14 Thorsten Kukuk <kukuk@suse.de>
* nscd/dbg_log.c (set_logfile): Only save name of logfile,
don't open it.
(init_logfile): New function, open logfile if requested.
* nscd/dbg_log.h: Adjust protoype for set_logfile, add init_logfile.
* nscd/nscd.c (main): Call init_logfile after forking in background.
* nscd/nscd_conf.c (nscd_parse_file): Adjust for new set_logfile.
2004-02-16 Ulrich Drepper <drepper@redhat.com>
ld.so.preload is not present [BZ #18].
Diffstat (limited to 'nscd')
-rw-r--r-- | nscd/dbg_log.c | 20 | ||||
-rw-r--r-- | nscd/dbg_log.h | 5 | ||||
-rw-r--r-- | nscd/nscd.c | 3 | ||||
-rw-r--r-- | nscd/nscd_conf.c | 12 |
4 files changed, 28 insertions, 12 deletions
diff --git a/nscd/dbg_log.c b/nscd/dbg_log.c index b854170..bcd9426 100644 --- a/nscd/dbg_log.c +++ b/nscd/dbg_log.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (c) 1998, 2000, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998. @@ -19,6 +19,7 @@ #include <stdarg.h> #include <stdio.h> +#include <string.h> #include <syslog.h> #include <unistd.h> #include "dbg_log.h" @@ -28,14 +29,25 @@ if in debug mode and no debug file, we write the messages to stderr, else to syslog. */ +static char *logfilename; FILE *dbgout; int debug_level; -int +void set_logfile (const char *logfile) { - dbgout = fopen (logfile, "a"); - return dbgout == NULL ? 0 : 1; + logfilename = strdup (logfile); +} + +int +init_logfile (void) +{ + if (logfilename) + { + dbgout = fopen (logfilename, "a"); + return dbgout == NULL ? 0 : 1; + } + return 1; } void diff --git a/nscd/dbg_log.h b/nscd/dbg_log.h index 705aa02..6cec54c 100644 --- a/nscd/dbg_log.h +++ b/nscd/dbg_log.h @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (c) 1998, 2000, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998. @@ -25,6 +25,7 @@ extern int debug_level; extern void dbg_log (const char *str, ...) __attribute__ ((__format__ (__printf__, 1, 2)));; -extern int set_logfile (const char *logfile); +extern void set_logfile (const char *logfile); +extern int init_logfile (void); #endif diff --git a/nscd/nscd.c b/nscd/nscd.c index d01f935..50d3cfc 100644 --- a/nscd/nscd.c +++ b/nscd/nscd.c @@ -223,6 +223,9 @@ main (int argc, char **argv) if (write_pid (_PATH_NSCDPID) < 0) dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno)); + if (!init_logfile ()) + dbg_log (_("Could not create log file")); + /* Ignore job control signals. */ signal (SIGTTOU, SIG_IGN); signal (SIGTTIN, SIG_IGN); diff --git a/nscd/nscd_conf.c b/nscd/nscd_conf.c index 23c28ce..5ede3d1 100644 --- a/nscd/nscd_conf.c +++ b/nscd/nscd_conf.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 2000, 2003 Free Software Foundation, Inc. +/* Copyright (c) 1998, 2000, 2003, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. @@ -55,6 +55,9 @@ nscd_parse_file (const char *fname, struct database dbs[lastdb]) if (fp == NULL) return -1; + /* The stream is not used by more than one thread. */ + (void) __fsetlocking (fp, FSETLOCKING_BYCALLER); + line = NULL; len = 0; @@ -166,10 +169,7 @@ nscd_parse_file (const char *fname, struct database dbs[lastdb]) dbg_log ("server %s is not supported\n", arg1); } else if (strcmp (entry, "logfile") == 0) - { - if (!set_logfile (arg1)) - dbg_log (_("Could not create log file \"%s\""), arg1); - } + set_logfile (arg1); else if (strcmp (entry, "debug-level") == 0) { int level = atoi (arg1); @@ -204,7 +204,7 @@ nscd_parse_file (const char *fname, struct database dbs[lastdb]) else dbg_log (_("Unknown option: %s %s %s"), entry, arg1, arg2); } - while (!feof (fp)); + while (!feof_unlocked (fp)); /* Free the buffer. */ free (line); |