#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <stdarg.h>
#include "libtools.h"


static int	ErrorCount = 0;
static int	SysErrorCount = 0;
static char	*ProgName = "ERROR";
static void	(*UserErrorExit)(void);

void
error_init(char *progname, void (*exitfunc)(void))
{
	ProgName = progname;
	UserErrorExit = exitfunc;
	ErrorCount = 0;
	SysErrorCount = 0;

	setvbuf(stderr, (char *) NULL, _IOLBF, BUFSIZ);
}

void
error(int fatal, char *fmt, ...)
{
	va_list	ap;

        fprintf(stderr, "%s: ", ProgName);

	++ErrorCount;

        va_start(ap, fmt);
        vfprintf(stderr, fmt, ap);
        va_end(ap);

	if (fatal)
	{
		if (UserErrorExit)
			(*UserErrorExit)();
		exit(fatal & 255);
	}
}

void
syserror(int fatal, char *fmt, ...)
{
	va_list	ap;
	int	err = errno;
	
        fprintf(stderr, "%s: ", ProgName);

	++SysErrorCount;

        va_start(ap, fmt);
        vfprintf(stderr, fmt, ap);
        va_end(ap);

#ifdef  __USE_BSD
	if (err > 0 && err <= sys_nerr)
		(void) fprintf(stderr, "%s: ", sys_errlist[err]);
#else
	perror("");
#endif

	if (fatal)
	{
		if (UserErrorExit)
			(*UserErrorExit)();
		exit(fatal & 255);
	}
}
