Select Git revision
Per Cederqvist authored
logII.c 1.74 KiB
/*
* log.c
*
* File created by ceder 1990-05-25.
*/
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum
{
MESSAGE, /* No action when message_counter is 0. */
WARNING, /* Sync&Restart when message_counter is 0. */
RESTART, /* Sync&Restart immediately. */
CRASH /* Don't sync, but restart immediately. */
} log_class;
typedef enum log_class Log_class;
extern void
log (Log_class class,
const char *file,
const char *function,
int *message_counter,
const char *format, ...)
{
va_list AP;
time_t clock;
Bool log_it = TRUE;
Bool restart = FALSE;
va_start(AP, format);
time(&clock);
switch(log_class)
{
case MESSAGE:
if ( message_counter != NULL && message_counter > 0 )
message_counter--;
else
log_it = FALSE;
break;
case WARNING:
if ( message_counter != NULL )
if ( *message_counter > 0 )
message_counter--;
else
restart = TRUE;
break;
case RESTART:
case CRASH:
break;
#ifndef COMPILE_CHECKS
default:
fprintf(stderr, "Deep Internal Error: log() called"
"with log_class %d.\n", log_class);
#endif
}
if ( log_it == TRUE )
{
fprintf(stderr, "--> %-19s %-29s %s", ctime(&clock));
vfprintf(stderr, format, AP);
}
if ( log_class == RESTART || (log_class == WARNING
&& message_counter != NULL
&& *message_counter <= 0))
{
fprintf(stderr, "++> Syncing.\n");
cache_sync();
}
if ( restart == TRUE || log_class == RESTART || log_class == CRASH )
{
fprintf(stderr, "+++> Restarting LysKOM.\n");
/* #include "CloseFileDescriptors" */
execl("/usr/lyskom/bin/ramkomd", "ramkomd", NULL);
fprintf(stderr, "+++> execl() failed.\n");
exit(1);
}
va_end(AP);
}