[BACK]Return to log-client.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/Attic/log-client.c between version 1.2 and 1.3

version 1.2, 1999/10/16 20:54:54 version 1.3, 1999/11/10 23:36:44
Line 10 
Line 10 
 Created: Mon Mar 20 21:13:40 1995 ylo  Created: Mon Mar 20 21:13:40 1995 ylo
   
 Client-side versions of debug(), log(), etc.  These print to stderr.  Client-side versions of debug(), log(), etc.  These print to stderr.
   This is a stripped down version of log-server.c.
   
 */  */
   
Line 19 
Line 20 
 #include "xmalloc.h"  #include "xmalloc.h"
 #include "ssh.h"  #include "ssh.h"
   
 static int log_debug = 0;  static LogLevel log_level = SYSLOG_LEVEL_INFO;
 static int log_quiet = 0;  
   
 void log_init(char *av0, int on_stderr, int debug, int quiet,  /* Initialize the log.
               SyslogFacility facility)       av0        program name (should be argv[0])
 {       level      logging level
   log_debug = debug;       */
   log_quiet = quiet;  
 }  
   
 void log(const char *fmt, ...)  void
   log_init(char *av0, LogLevel level, SyslogFacility ignored1, int ignored2)
 {  {
   va_list args;    switch (level)
   
   if (log_quiet)  
     return;  
   va_start(args, fmt);  
   vfprintf(stderr, fmt, args);  
   fprintf(stderr, "\r\n");  
   va_end(args);  
 }  
   
 void debug(const char *fmt, ...)  
 {  
   va_list args;  
   if (log_quiet || !log_debug)  
     return;  
   va_start(args, fmt);  
   fprintf(stderr, "debug: ");  
   vfprintf(stderr, fmt, args);  
   fprintf(stderr, "\r\n");  
   va_end(args);  
 }  
   
 void error(const char *fmt, ...)  
 {  
   va_list args;  
   if (log_quiet)  
     return;  
   va_start(args, fmt);  
   vfprintf(stderr, fmt, args);  
   fprintf(stderr, "\r\n");  
   va_end(args);  
 }  
   
 struct fatal_cleanup  
 {  
   struct fatal_cleanup *next;  
   void (*proc)(void *);  
   void *context;  
 };  
   
 static struct fatal_cleanup *fatal_cleanups = NULL;  
   
 /* Registers a cleanup function to be called by fatal() before exiting. */  
   
 void fatal_add_cleanup(void (*proc)(void *), void *context)  
 {  
   struct fatal_cleanup *cu;  
   
   cu = xmalloc(sizeof(*cu));  
   cu->proc = proc;  
   cu->context = context;  
   cu->next = fatal_cleanups;  
   fatal_cleanups = cu;  
 }  
   
 /* Removes a cleanup frunction to be called at fatal(). */  
   
 void fatal_remove_cleanup(void (*proc)(void *context), void *context)  
 {  
   struct fatal_cleanup **cup, *cu;  
   
   for (cup = &fatal_cleanups; *cup; cup = &cu->next)  
     {      {
       cu = *cup;      case SYSLOG_LEVEL_QUIET:
       if (cu->proc == proc && cu->context == context)      case SYSLOG_LEVEL_ERROR:
         {      case SYSLOG_LEVEL_FATAL:
           *cup = cu->next;      case SYSLOG_LEVEL_INFO:
           xfree(cu);      case SYSLOG_LEVEL_CHAT:
           return;      case SYSLOG_LEVEL_DEBUG:
         }        log_level = level;
         break;
       default:
         /* unchanged */
         break;
     }      }
   fatal("fatal_remove_cleanup: no such cleanup function: 0x%lx 0x%lx\n",  
         (unsigned long)proc, (unsigned long)context);  
 }  }
   
 /* Function to display an error message and exit.  This is in this file because  #define MSGBUFSIZE 1024
    this needs to restore terminal modes before exiting.  See log-client.c  
    for other related functions. */  
   
 void fatal(const char *fmt, ...)  void
   do_log(LogLevel level, const char *fmt, va_list args)
 {  {
   va_list args;    char msgbuf[MSGBUFSIZE];
   struct fatal_cleanup *cu, *next_cu;  
   static int fatal_called = 0;  
   
   if (!fatal_called)  
     {  
       fatal_called = 1;  
   
       /* Call cleanup functions. */    if (level > log_level)
       for (cu = fatal_cleanups; cu; cu = next_cu)      return;
         {    if (level == SYSLOG_LEVEL_DEBUG)
           next_cu = cu->next;      fprintf(stderr, "debug: ");
           (*cu->proc)(cu->context);    vsnprintf(msgbuf, sizeof(msgbuf), fmt, args);
         }    fprintf(stderr, "%s", msgbuf);
     }  
   
   va_start(args, fmt);  
   vfprintf(stderr, fmt, args);  
   fprintf(stderr, "\r\n");    fprintf(stderr, "\r\n");
   va_end(args);  
   exit(255);  
 }  }
   
 /* fatal() is in ssh.c so that it can properly reset terminal modes. */  

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3