#include"unp.h"#include<stdarg.h>/* ANSI C header file */#include<syslog.h>/* for syslog() */int daemon_proc;/* set nonzero by daemon_init() */staticvoiderr_doit(int,int,constchar*, va_list);voiderr_sys(constchar*fmt,...){va_list ap;va_start(ap, fmt);err_doit(1, LOG_ERR, fmt, ap);va_end(ap);exit(1);}staticvoiderr_doit(int errnoflag,int level,constchar*fmt, va_list ap){int errno_save, n;char buf[MAXLINE +1];errno_save = errno;/* value caller might want printed */#ifdef HAVE_VSNPRINTFvsnprintf(buf, MAXLINE, fmt, ap);/* safe */#elsevsprintf(buf, fmt, ap);/* not safe */#endifn =strlen(buf);if(errnoflag)snprintf(buf + n, MAXLINE - n,": %s",strerror(errno_save));strcat(buf,"\n");if(daemon_proc){syslog(level, buf);}else{fflush(stdout);/* in case stdout and stderr are the same */fputs(buf,stderr);fflush(stderr);}return;}