aboutsummaryrefslogtreecommitdiff
path: root/src/rc/rc-logger.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rc/rc-logger.c')
-rw-r--r--src/rc/rc-logger.c90
1 files changed, 48 insertions, 42 deletions
diff --git a/src/rc/rc-logger.c b/src/rc/rc-logger.c
index 697ebddd..f0320778 100644
--- a/src/rc/rc-logger.c
+++ b/src/rc/rc-logger.c
@@ -1,8 +1,8 @@
/*
- rc-logger.c
- Spawns a logging daemon to capture stdout and stderr so we can log
- them to a buffer and/or files.
- */
+ rc-logger.c
+ Spawns a logging daemon to capture stdout and stderr so we can log
+ them to a buffer and/or files.
+*/
/*
* Copyright 2007-2008 Roy Marples <roy@marples.name>
@@ -46,11 +46,11 @@
#include <unistd.h>
#ifdef __linux__
-# include <pty.h>
+# include <pty.h>
#elif defined(__NetBSD__) || defined(__OpenBSD__)
-# include <util.h>
+# include <util.h>
#else
-# include <libutil.h>
+# include <libutil.h>
#endif
#include "einfo.h"
@@ -60,7 +60,7 @@
#define LOGFILE RC_SVCDIR "/rc.log"
#define PERMLOG "/var/log/rc.log"
-#define MOVELOG "cat " LOGFILE " 2>/dev/null >>" PERMLOG " && " \
+#define MOVELOG "cat " LOGFILE " 2>/dev/null >>" PERMLOG " && " \
"rm -f " LOGFILE
static int signal_pipe[2] = { -1, -1 };
@@ -78,11 +78,12 @@ pid_t rc_logger_pid = -1;
int rc_logger_tty = -1;
bool rc_in_logger = false;
-static void write_log(int logfd, const char *buffer, size_t bytes)
+static void
+write_log(int logfd, const char *buffer, size_t bytes)
{
const char *p = buffer;
- while ((size_t) (p - buffer) < bytes) {
+ while ((size_t)(p - buffer) < bytes) {
switch (*p) {
case '\r':
goto cont;
@@ -110,7 +111,9 @@ cont:
p++;
}
}
-static void write_time(FILE *f, const char *s)
+
+static void
+write_time(FILE *f, const char *s)
{
time_t now = time(NULL);
struct tm *tm = localtime(&now);
@@ -119,7 +122,8 @@ static void write_time(FILE *f, const char *s)
fflush(f);
}
-void rc_logger_close(void)
+void
+rc_logger_close(void)
{
int sig = SIGTERM;
@@ -138,7 +142,8 @@ void rc_logger_close(void)
dup2(fd_stderr, STDERR_FILENO);
}
-void rc_logger_open(const char *level)
+void
+rc_logger_open(const char *level)
{
int slave_tty;
struct termios tt;
@@ -157,7 +162,7 @@ void rc_logger_open(const char *level)
eerrorx("pipe: %s", strerror(errno));
for (i = 0; i < 2; i++)
if ((s = fcntl (signal_pipe[i], F_GETFD, 0) == -1 ||
- fcntl (signal_pipe[i], F_SETFD, s | FD_CLOEXEC) == -1))
+ fcntl (signal_pipe[i], F_SETFD, s | FD_CLOEXEC) == -1))
eerrorx("fcntl: %s", strerror (errno));
if (isatty(STDOUT_FILENO)) {
@@ -202,36 +207,38 @@ void rc_logger_open(const char *level)
if (rc_logger_tty >= 0)
fd[1].fd = rc_logger_tty;
for (;;) {
- if ((s = poll(fd, rc_logger_tty >= 0 ? 2 : 1, -1)) == -1) {
+ if ((s = poll(fd,
+ rc_logger_tty >= 0 ? 2 : 1, -1)) == -1)
+ {
eerror("poll: %s", strerror(errno));
break;
- }
-
- if (s > 0) {
- if (fd[1].revents & (POLLIN | POLLHUP)) {
- memset(buffer, 0, BUFSIZ);
- bytes = read(rc_logger_tty, buffer, BUFSIZ);
- write(STDOUT_FILENO, buffer, bytes);
-
- if (log)
- write_log(fileno (log), buffer, bytes);
- else {
- if (logbuf_size - logbuf_len < bytes) {
- logbuf_size += BUFSIZ * 10;
- logbuf = xrealloc(logbuf,
- sizeof(char ) *
- logbuf_size);
- }
-
- memcpy(logbuf + logbuf_len, buffer, bytes);
- logbuf_len += bytes;
+ } else if (s == 0)
+ continue;
+
+ if (fd[1].revents & (POLLIN | POLLHUP)) {
+ memset(buffer, 0, BUFSIZ);
+ bytes = read(rc_logger_tty, buffer, BUFSIZ);
+ write(STDOUT_FILENO, buffer, bytes);
+
+ if (log)
+ write_log(fileno (log), buffer, bytes);
+ else {
+ if (logbuf_size - logbuf_len < bytes) {
+ logbuf_size += BUFSIZ * 10;
+ logbuf = xrealloc(logbuf,
+ sizeof(char ) *
+ logbuf_size);
}
- }
- /* Only SIGTERMS signals come down this pipe */
- if (fd[0].revents & (POLLIN | POLLHUP))
- break;
+ memcpy(logbuf + logbuf_len,
+ buffer, bytes);
+ logbuf_len += bytes;
+ }
}
+
+ /* Only SIGTERMS signals come down this pipe */
+ if (fd[0].revents & (POLLIN | POLLHUP))
+ break;
}
free(buffer);
if (logbuf) {
@@ -246,10 +253,9 @@ void rc_logger_open(const char *level)
fclose(log);
}
- /* Try and cat our new logfile to a more permament location and then
- * punt it */
+ /* Try and cat our new logfile to a more permament location
+ and then punt it */
system(MOVELOG);
-
exit(0);
/* NOTREACHED */