/*****************************************************************************
NAME:
error.c -- print and log error messages
AUTHOR:
David Relson <relson@osagesoftware.com>
******************************************************************************/
#include "common.h"
#include <stdarg.h>
#include <ctype.h>
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
#endif
#include "error.h"
#ifdef NEEDTRIO
#include "trio.h"
#endif
void print_error( const char *file, unsigned long line, const char *format, ... )
{
char message[256];
size_t l;
va_list ap;
va_start(ap, format);
l = (size_t)vsnprintf(message, sizeof(message), format, ap);
if (l >= sizeof(message)) {
/* output was truncated, mark truncation */
strcpy(message + sizeof(message) - 4, "...");
}
va_end(ap);
/* security: replace unprintable characters by underscore "_" */
for (l = 0; l < strlen(message); l++)
if (!isprint((unsigned char)message[l]))
message[l] = '_';
#if 0
fprintf(stderr, "%s:%lu:", file, line);
#endif
fprintf(stderr, "%s[%ld]: %s\n", progname, (long)getpid(), message);
#ifdef HAVE_SYSLOG_H
if (logflag)
syslog(LOG_INFO, "%s:%lu: %s", file, line, message );
#endif
}