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.