]> git.saurik.com Git - apple/system_cmds.git/blobdiff - mach_init.tproj/error_log.c
system_cmds-279.6.1.tar.gz
[apple/system_cmds.git] / mach_init.tproj / error_log.c
index 599e4d975d73b85a98ab3648a20369dc376035b4..2cccad5b311247be0ea257ef4669db1b3bf1336e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
 #import "error_log.h"
 
 static pthread_mutex_t errlog_lock = PTHREAD_MUTEX_INITIALIZER;
+static boolean_t stderr_open = FALSE;
+static boolean_t log_stopped = FALSE;
 
 void
-init_errlog(boolean_t is_init)
+init_errlog(boolean_t daemon)
 {
        int nfds, fd;
 
-       if (is_init) {
-               close(0);
-               freopen("/dev/console", "r", stdin);
-               setbuf(stdin, NULL);
-               close(1);
-               freopen("/dev/console", "w", stdout);
-               setbuf(stdout, NULL);
-               close(2);
-               freopen("/dev/console", "w", stderr);
-               setbuf(stderr, NULL);
+       if (!daemon) {
+               stderr_open = TRUE; 
+               nfds = getdtablesize();
+               for (fd = 3; fd < nfds; fd++)
+                       close(fd);
+       } else {
+               openlog((char *)program_name, LOG_PID|LOG_CONS, LOG_DAEMON);
+               setlogmask(LOG_UPTO(LOG_DEBUG)); /* we'll do our own filtering */
        }
+}
 
-       nfds = getdtablesize();
-       for (fd = 3; fd < nfds; fd++)
-               close(fd);
-       openlog((char *)program_name, LOG_PID, LOG_DAEMON);
-       setlogmask(LOG_UPTO(LOG_INFO));
+void
+stop_errlog(void)
+{
+       log_stopped = TRUE;
 }
 
 void
 close_errlog(void)
 {
+       stop_errlog();
        closelog();
 }
 
 static void do_log(const int level, const char *format, va_list ap)
 {
-       pthread_mutex_lock(&errlog_lock);
-       if (debugging) {
-               fprintf(stderr, "%s[%d]%s: ",
-                       level == LOG_ALERT ? " FATAL" : "",
-                       getpid(), program_name);
-               vfprintf(stderr, format, ap);
-               fprintf(stderr, "\n");
-       } else {
-               vsyslog(level, format, ap);
+       if (!log_stopped && (debugging || level <= LOG_NOTICE)) {
+               pthread_mutex_lock(&errlog_lock);
+               if (stderr_open) {
+                       fprintf(stderr, "%s[%d]%s: ",
+                               level == LOG_ALERT ? " FATAL" : "",
+                               getpid(), program_name);
+                       vfprintf(stderr, format, ap);
+                       fprintf(stderr, "\n");
+               } else {
+                       vsyslog(level, format, ap);
+               }
+               pthread_mutex_unlock(&errlog_lock);
        }
-       pthread_mutex_unlock(&errlog_lock);
 }
 
 void debug(const char *format, ...)
@@ -109,7 +112,7 @@ void info(const char *format, ...)
        va_end(ap);
 }
 
-__private_extern__ void log(const char *format, ...)
+void notice(const char *format, ...)
 {
        va_list ap;