+static FILE *logf;
+
+static void vlogmsg(
+#ifndef PRINTF_WORKS_PM
+ char outerr,
+#endif
+ const char *fmt,va_list ap)
+{
+time_t stamp;
+char *ctm,*s;
+pid_t mypid=-1;
+char host[LINE_MAX];
+
+ if (!logf) return;
+ if (mypid==-1) {
+ mypid=getpid();
+ if (gethostname(host,sizeof(host))) strcpy(host,"<ERROR>");
+ }
+ time(&stamp);
+ ctm=ctime(&stamp);
+ if ((s=strchr(ctm,'\n'))) *s='\0';
+ fprintf(logf,"%s %s %s[%d]: ",ctm,host,pname,mypid);
+ vfprintf(logf,fmt,ap);
+#ifndef PRINTF_WORKS_PM
+ if (outerr) fputs(strerror(errno),logf);
+#endif
+ fputc('\n',logf);
+ fflush(logf);
+}
+
+static void logmsg(const char *fmt,...)
+{
+va_list ap;
+ va_start(ap,fmt);
+ vlogmsg(
+#ifndef PRINTF_WORKS_PM
+ 0,
+#endif
+ fmt,ap);
+ va_end(ap);
+}