This is errorlog.c in view mode; [Download] [Up]
/*
* Error routines for programs that can run as a daemon.
*/
#include <syslog.h>
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "errorlog.h"
/*
* Print a message and return to caller. Caller specifies "errnoflag" and
* "priority".
*/
static void
log_doit(int errnoflag, int priority, const char *fmt, va_list ap)
{
int errno_save;
char buf[ERRLOG_C_STRLEN + 1];
pthread_lock_global_np();
errno_save = errno; /* value caller might want printed */
vsprintf(buf, fmt, ap);
if (errnoflag)
sprintf(buf+strlen(buf), ": %s", strerror(errno_save));
strcat(buf, "\n");
syslog(priority, buf);
pthread_unlock_global_np();
}
/*
* Initialize syslog(), if running as daemon.
*/
void
log_open( const char *ident, int option, int facility )
{
pthread_lock_global_np();
openlog(ident, option, facility);
pthread_unlock_global_np();
}
/*
* Nonfatal error related to a system call.
* Print a message with the system's errno value and return.
**/
void
log_ret(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
log_doit(1, LOG_ERR, fmt, ap);
va_end(ap);
pthread_unlock_global_np();
}
/*
* Fatal error related to a system call. Print a message and terminate.
*/
void
log_sys(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
log_doit(1, LOG_ERR, fmt, ap);
va_end(ap);
exit(2);
pthread_unlock_global_np(); /* NEVER GETS HERE */
}
/*
* Nonfatal error unrelated to a system call. Print a message and return.
*/
void
log_msg(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
log_doit(0, LOG_ERR, fmt, ap);
va_end(ap);
pthread_unlock_global_np();
}
/* Fatal error unrelated to a system call.
* Print a message and terminate. */
void
log_quit(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
log_doit(0, LOG_ERR, fmt, ap);
va_end(ap);
exit(2);
pthread_unlock_global_np(); /* NEVER GETS HERE */
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.