V8/usr/net/face/common.c
#include "fserv.h"
char dbgbuf[128];
/*VARARGS*/
debug(s, a, b, c, d, e, f)
{ /* no buffering, shared fd with children */
long x;
extern char *ctime();
x = time(0);
sprintf(dbgbuf, s, a, b, c, d, e, f);
strcat(dbgbuf, " ");
strcat(dbgbuf, ctime(&x));
write(dbgfd, dbgbuf, strlen(dbgbuf));
}
extern int sys_nerr;
extern char *sys_errlist[];
perror(s)
char *s;
{ register char *c;
c = "Unknown error";
if(errno < sys_nerr)
c = sys_errlist[errno];
debug("%s: %s (%d)", s, c, errno);
}
debugreset()
{
dptr = 0;
}
xdebug(s, a, b, c, d, e, f, g)
{
sprintf(debugbuf[dptr], s, a, b, c, d, e, f, g);
dptr++;
if(dptr >= NDBG) {
debugreset();
xdebug("buffer wrapped");
}
}
/* detach from our environment */
detach (logfile)
char *logfile;
{
int i;
/* detach from the process group */
setpgrp (0, 0);
/* ignore some signals */
signal(SIGPIPE, SIG_IGN);
signal(SIGHUP, SIG_IGN);
signal(SIGTERM, SIG_IGN);
/* detach from old i/o */
switch (fork()) {
case -1:
perror ("couldn't fork");
exit (-1);
case 0:
for (i = 0; i < NOFILE; i++)
close (i);
i = creat (logfile, 0666);
dup2(i, 2);
dbgfd = 2;
close(i);
break;
default:
_exit (0);
}
}