_log/_vlog were always called so we always had a function call hit even if we're not debugging. Expand on the debugging macros so the decision to call _log/_vlog is done in the caller already. Also, make a log level difference between syscall_printf and system_printf. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* bsd_log.cc
 | |
| 
 | |
| This file is part of Cygwin.
 | |
| 
 | |
| This software is a copyrighted work licensed under the terms of the
 | |
| Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
 | |
| details. */
 | |
| #ifdef __OUTSIDE_CYGWIN__
 | |
| #include "woutsup.h"
 | |
| #define _KERNEL 1
 | |
| #define __BSD_VISIBLE 1
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <libgen.h>
 | |
| 
 | |
| int32_t log_level = 8; /* Illegal value.  Don't change! */
 | |
| tun_bool_t log_debug = TUN_UNDEF;
 | |
| tun_bool_t log_syslog = TUN_UNDEF;
 | |
| tun_bool_t log_stderr = TUN_UNDEF;
 | |
| 
 | |
| static CRITICAL_SECTION cs;
 | |
| static bool cs_inited;
 | |
| 
 | |
| void
 | |
| loginit (tun_bool_t opt_stderr, tun_bool_t opt_syslog)
 | |
| {
 | |
|   if (log_debug == TUN_UNDEF)
 | |
|     TUNABLE_BOOL_FETCH ("kern.log.debug", &log_debug);
 | |
|   if (log_debug == TUN_UNDEF)
 | |
|     log_debug = TUN_FALSE;
 | |
| 
 | |
|   if (opt_stderr != TUN_UNDEF)
 | |
|     log_stderr = opt_stderr;
 | |
|   else
 | |
|     TUNABLE_BOOL_FETCH ("kern.log.stderr", &log_stderr);
 | |
|   if (log_stderr == TUN_UNDEF)
 | |
|     log_stderr = TUN_FALSE;
 | |
| 
 | |
|   if (opt_syslog != TUN_UNDEF)
 | |
|     log_syslog = opt_syslog;
 | |
|   else
 | |
|     TUNABLE_BOOL_FETCH ("kern.log.syslog", &log_syslog);
 | |
|   if (log_syslog == TUN_UNDEF)
 | |
|     log_syslog = TUN_FALSE;
 | |
| 
 | |
|   if (log_level == 8)
 | |
|     TUNABLE_INT_FETCH ("kern.log.level", &log_level);
 | |
|   if (log_level == 8)
 | |
|     log_level = 6;
 | |
|   InitializeCriticalSection (&cs);
 | |
|   cs_inited = true;
 | |
| }
 | |
| 
 | |
| void
 | |
| _vlog (const char *file, int line, int level,
 | |
| 	const char *fmt, va_list ap)
 | |
| {
 | |
|   char buf[16384];
 | |
|   char *pos;
 | |
| 
 | |
|   if ((level == LOG_DEBUG && log_debug != TUN_TRUE)
 | |
|       || (level != LOG_DEBUG && level >= log_level))
 | |
|     return;
 | |
|   pos = stpcpy (buf, "cygserver: ");
 | |
|   if (file && log_debug == TUN_TRUE)
 | |
|     pos += snprintf (pos, 16384 - (pos - buf), "%s, line %d: ",
 | |
| 		     basename ((char *) file), line);
 | |
|   vsnprintf (pos, 16384 - (pos - buf), fmt, ap);
 | |
|   if (log_syslog == TUN_TRUE && level != LOG_DEBUG)
 | |
|     syslog (level, buf);
 | |
|   if (log_stderr == TUN_TRUE || level == LOG_DEBUG)
 | |
|     {
 | |
|       if (!cs_inited)	/* Only occurs in --help scenario */
 | |
| 	{
 | |
| 	  InitializeCriticalSection (&cs);
 | |
| 	  cs_inited = true;
 | |
| 	}
 | |
|       EnterCriticalSection (&cs);
 | |
|       fputs (buf, stderr);
 | |
|       fputc ('\n', stderr);
 | |
|       LeaveCriticalSection (&cs);
 | |
|     }
 | |
| }
 | |
| 
 | |
| void
 | |
| _log (const char *file, int line, int level, const char *fmt, ...)
 | |
| {
 | |
|   va_list ap;
 | |
|   va_start (ap, fmt);
 | |
|   _vlog (file, line, level, fmt, ap);
 | |
| }
 | |
| 
 | |
| void
 | |
| _vpanic (const char *file, int line, const char *fmt, va_list ap)
 | |
| {
 | |
|   _vlog (file, line, LOG_EMERG, fmt, ap);
 | |
|   exit (1);
 | |
| }
 | |
| 
 | |
| void
 | |
| _panic (const char *file, int line, const char *fmt, ...)
 | |
| {
 | |
|   va_list ap;
 | |
|   va_start (ap, fmt);
 | |
|   _vpanic (file, line, fmt, ap);
 | |
| }
 | |
| #endif /* __OUTSIDE_CYGWIN__ */
 |