if (a->f & b->f & EPF_FILE) {
if (t->c->ab.err)
- fw_log(-1, "[%s] error: %s", t->desc, strerror(t->c->ab.err));
+ fw_log(NOW, "[%s] error: %s", t->desc, strerror(t->c->ab.err));
else if (t->c->ba.err)
- fw_log(-1, "[%s] error: %s", t->desc, strerror(t->c->ba.err));
+ fw_log(NOW, "[%s] error: %s", t->desc, strerror(t->c->ba.err));
if (t->s & EPS_AB)
chan_close(&t->c->ab);
if (!(b->f & EPF_PENDING) && (t->s & EPS_BA))
/* --- Make a pipe for standard error --- */
if (pipe(fd)) {
- fw_log(-1, "[%s] couldn't create pipe: %s", xe->desc, strerror(errno));
+ fw_log(NOW, "[%s] couldn't create pipe: %s", xe->desc, strerror(errno));
return;
}
fdflags(fd[0], O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC);
/* --- Fork a child, and handle an error if there was one --- */
if ((kid = fork()) == -1) {
- fw_log(-1, "[%s] couldn't fork: %s", xe->desc, strerror(errno));
+ fw_log(NOW, "[%s] couldn't fork: %s", xe->desc, strerror(errno));
close(fd[0]);
close(fd[1]);
return;
xept_list->prev = xe;
xept_list = xe;
if (!(xe->xo->f & XF_NOLOG))
- fw_log(-1, "[%s] started with pid %i", xe->desc, kid);
+ fw_log(NOW, "[%s] started with pid %i", xe->desc, kid);
fw_inc();
return;
}
/* Nothin' doin' */;
else if (WIFEXITED(xe->st)) {
if (WEXITSTATUS(xe->st) == 0)
- fw_log(-1, "[%s] pid %i exited successfully", xe->desc, xe->kid);
+ fw_log(NOW, "[%s] pid %i exited successfully", xe->desc, xe->kid);
else {
- fw_log(-1, "[%s] pid %i failed: status %i",
+ fw_log(NOW, "[%s] pid %i failed: status %i",
xe->desc, xe->kid, WEXITSTATUS(xe->st));
}
} else if (WIFSIGNALED(xe->st)) {
sprintf(buf, "signal %i", WTERMSIG(xe->st));
s = buf;
#endif
- fw_log(-1, "[%s] pid %i failed: %s", xe->desc, xe->kid, s);
+ fw_log(NOW, "[%s] pid %i failed: %s", xe->desc, xe->kid, s);
} else
- fw_log(-1, "[%s] pid %i failed: unrecognized status", xe->desc, xe->kid);
+ fw_log(NOW, "[%s] pid %i failed: unrecognized status",
+ xe->desc, xe->kid);
/* --- Free up the parent-side resources --- */
{
xept *xe = v;
if (p)
- fw_log(-1, "[%s] pid %i: %s", xe->desc, xe->kid, p);
+ fw_log(NOW, "[%s] pid %i: %s", xe->desc, xe->kid, p);
else {
close(xe->err.reader.fd);
selbuf_destroy(&xe->err);
else {
int n;
if ((n = open("/dev/null", O_RDWR)) < 0) {
- fw_log(-1, "couldn't open `/dev/null': %s", strerror(errno));
+ fw_log(NOW, "couldn't open `/dev/null': %s", strerror(errno));
return (0);
}
fdflags(n, O_NONBLOCK, O_NONBLOCK, FD_CLOEXEC, FD_CLOEXEC);
case FTYPE_NAME: {
int fd;
if ((fd = open(f->in.u.name, O_RDONLY | O_NONBLOCK)) < 0) {
- fw_log(-1, "[%s] couldn't open `%s' for reading: %s",
+ fw_log(NOW, "[%s] couldn't open `%s' for reading: %s",
desc, f->in.u.name, strerror(errno));
return (0);
}
if ((m & O_CREAT) &&
(fd = open(f->out.u.name, m | O_EXCL, f->fa.mode)) < 0 &&
(errno != EEXIST || (m & O_EXCL))) {
- fw_log(-1, "[%s] couldn't create `%s': %s",
+ fw_log(NOW, "[%s] couldn't create `%s': %s",
desc, f->out.u.name, strerror(errno));
REFFD_DEC(in);
return (0);
if (fd != -1) {
if (fattr_apply(f->out.u.name, &f->fa)) {
- fw_log(-1, "[%s] couldn't apply file attributes to `%s': %s",
+ fw_log(NOW, "[%s] couldn't apply file attributes to `%s': %s",
desc, f->out.u.name, strerror(errno));
}
} else if ((fd = open(f->out.u.name, m & ~O_CREAT)) < 0) {
- fw_log(-1, "[%s] couldn't open `%s': %s",
+ fw_log(NOW, "[%s] couldn't open `%s': %s",
desc, f->out.u.name, strerror(errno));
REFFD_DEC(in);
return (0);
if (flags & FW_QUIET)
return;
- if (t == -1)
+ if (t == NOW)
t = time(0);
tm = localtime(&t);
DENSURE(&d, 64);
default: abort();
}
- fw_log(-1, "closing down gracefully on %s", sn);
+ fw_log(NOW, "closing down gracefully on %s", sn);
source_killall();
}
default: abort();
}
- fw_log(-1, "closing down abruptly on %s", sn);
+ fw_log(NOW, "closing down abruptly on %s", sn);
source_killall();
endpt_killall();
}
assert(n == SIGHUP);
if (!conffiles) {
- fw_log(-1, "no configuration files to reload: ignoring SIGHUP");
+ fw_log(NOW, "no configuration files to reload: ignoring SIGHUP");
return;
}
- fw_log(-1, "reloading configuration files...");
+ fw_log(NOW, "reloading configuration files...");
source_killall();
scan_create(&sc);
for (cf = conffiles; cf; cf = cf->next) {
if ((fp = fopen(cf->name, "r")) == 0)
- fw_log(-1, "error loading `%s': %s", cf->name, strerror(errno));
+ fw_log(NOW, "error loading `%s': %s", cf->name, strerror(errno));
else
scan_add(&sc, scan_file(fp, cf->name, 0));
}
parse(&sc);
- fw_log(-1, "... reload completed OK");
+ fw_log(NOW, "... reload completed OK");
}
/*----- Startup and options parsing ---------------------------------------*/
if (!sel_select(sel))
selerr = 0;
else if (errno != EINTR && errno != EAGAIN) {
- fw_log(-1, "error from select: %s", strerror(errno));
+ fw_log(NOW, "error from select: %s", strerror(errno));
selerr++;
if (selerr > 8) {
- fw_log(-1, "too many consecutive select errors: bailing out");
+ fw_log(NOW, "too many consecutive select errors: bailing out");
exit(EXIT_FAILURE);
}
}
extern const char grammar_text[];
extern const char option_text[];
+/* --- Generally useful magic constants --- */
+
+#define NOW ((time_t)-1)
+
/* --- @fw_log@ --- *
*
- * Arguments: @time_t t@ = when the connection occurred or (@-1@)
+ * Arguments: @time_t t@ = when the connection occurred or (@NOW@)
* @const char *fmt@ = format string to fill in
* @...@ = other arguments
*