This is errormsg.c in view mode; [Download] [Up]
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include "errormsg.h"
static void
err_doit(int, const char *, va_list);
/* Nonfatal error related to a system call.
* Print a message and return. */
void
err_ret(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
pthread_unlock_global_np();
return;
}
/* Fatal error related to a system call.
* Print a message and terminate. */
void
err_sys(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
exit(1);
pthread_unlock_global_np(); /* NEVER GETS HERE */
}
/* Fatal error related to a system call.
* Print a message, dump core, and terminate. */
void
err_dump(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
err_doit(1, fmt, ap);
va_end(ap);
abort(); /* dump core and terminate */
exit(1); /* shouldn't get here */
pthread_unlock_global_np(); /* Won't get here, either */
}
/* Nonfatal error unrelated to a system call.
* Print a message and return. */
void
err_msg(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
err_doit(0, fmt, ap);
va_end(ap);
pthread_unlock_global_np();
return;
}
/* Fatal error unrelated to a system call.
* Print a message and terminate. */
void
err_quit(const char *fmt, ...)
{
va_list ap;
pthread_lock_global_np();
va_start(ap, fmt);
err_doit(0, fmt, ap);
va_end(ap);
exit(1);
pthread_unlock_global_np(); /* NEVER GETS HERE */
}
/* Print a message and return to caller.
* Caller specifies "errnoflag". */
static void
err_doit(int errnoflag, const char *fmt, va_list ap)
{
int errno_save;
char buf[ERRMSG_C_STRLEN + 1];
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");
fflush(stdout); /* in case stdout and stderr are the same */
fputs(buf, stderr);
fflush(NULL); /* flushes all stdio output streams */
return;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.