--- blogd.c +++ blogd.c 2009-12-21 15:55:09.295430094 +0100 @@ -364,8 +364,8 @@ int main(int argc, char *argv[]) fflush(stdout); exit(0); } - pidfile(); - prepareIO(reconnect, pgrp, 0, 1, fd2); + + prepareIO(reconnect, pidfile, pgrp, 0, 1, fd2); while (!signaled) safeIO(); --- libconsole.c +++ libconsole.c 2009-12-21 16:02:20.007429734 +0100 @@ -155,7 +155,7 @@ out: /* * Arg used: safe out */ -static void (*vc_reconnect)(int fd) = NULL; +static void (*vc_reconnect)(int fd); static inline void safeout (int fd, const char *ptr, size_t s) { int saveerr = errno; @@ -739,11 +739,13 @@ static void *action(void *dummy) * Prepare I/O */ static const char *fifo_name = _PATH_BLOG_FIFO; +static void (*vr_access)(void); static pid_t pgroup = -1; -void prepareIO(void (*rfunc)(int), const pid_t pgrp, const int in, const int out, const int second) +void prepareIO(void (*rfunc)(int), void (*pfunc)(void), const pid_t pgrp, const int in, const int out, const int second) { vc_reconnect = rfunc; + vr_access = pfunc; pgroup = pgrp; fdread = in; fdwrite = out; @@ -871,6 +873,10 @@ void safeIO (void) error("Can not open %s: %s\n", BOOT_LOGFILE, STRERR); goto skip; } + if (vr_access) { + (*vr_access)(); + vr_access = NULL; + } if ((flog = fdopen (log, "a")) == NULL) error("Can not open %s: %s\n", BOOT_LOGFILE, STRERR); --- libconsole.h +++ libconsole.h 2009-12-21 15:54:41.299449887 +0100 @@ -2,6 +2,6 @@ extern void pushd(const char * path); extern void popd(void); extern char * fetchtty(const pid_t pid, const pid_t ppid, unsigned int *mjmi); extern char * secondtty(char * compare); -extern void prepareIO(void (*rfunc)(int), const pid_t pgrp, const int in, const int out, const int second); +extern void prepareIO(void (*rfunc)(int), void (*pfunc)(void), const pid_t pgrp, const int in, const int out, const int second); extern void safeIO (void); extern void closeIO(void);