128 lines
3.3 KiB
Plaintext
128 lines
3.3 KiB
Plaintext
--- blogd.c
|
|
+++ blogd.c 2011-03-02 11:25:01.151926991 +0000
|
|
@@ -301,9 +301,16 @@ int main(int argc, char *argv[])
|
|
secondtty(cons, st.st_rdev);
|
|
|
|
(void)ioctl(0, TIOCCONS, NULL); /* Undo any current map if any */
|
|
+ close(0);
|
|
+
|
|
if (ioctl(pts, TIOCCONS, NULL) < 0)
|
|
error("can not set console device to %s: %s\n", ptsname, strerror(errno));
|
|
|
|
+ dup2(pts, 1);
|
|
+ dup2(pts, 2);
|
|
+ if (pts > 2)
|
|
+ close(pts);
|
|
+
|
|
for (c = cons; c; c = c->next) {
|
|
#ifdef _PC_MAX_CANON
|
|
if ((c->max_canon = (ssize_t)fpathconf(c->fd, _PC_MAX_CANON)) <= 0)
|
|
@@ -356,21 +363,16 @@ int main(int argc, char *argv[])
|
|
close(cons->fd);
|
|
cons->fd = 1; /* Choose stdout */
|
|
}
|
|
- close(pts);
|
|
close(ptm);
|
|
break;
|
|
case -1:
|
|
- close(pts);
|
|
close(ptm);
|
|
warn("can not fork to become daemon: %s\n", strerror(errno));
|
|
goto err;
|
|
default:
|
|
time(&tt);
|
|
stt = ctime(&tt);
|
|
- close(pts);
|
|
close(ptm);
|
|
- close(cons->fd);
|
|
- cons->fd = -1;
|
|
for (c = cons; c; c = c->next) {
|
|
if (c->fd > 0) {
|
|
close(c->fd);
|
|
--- libconsole.c
|
|
+++ libconsole.c 2011-03-02 10:33:17.032457114 +0000
|
|
@@ -707,11 +707,12 @@ static void parselog(unsigned char *buf,
|
|
static void copylog(const unsigned char *buf, const size_t s)
|
|
{
|
|
lock(&llock);
|
|
- if (!nl) {
|
|
+ if (!nl)
|
|
addlog('\n');
|
|
- nl = 1;
|
|
- }
|
|
storelog(buf, s);
|
|
+ if (buf[s-1] != '\n')
|
|
+ addlog('\n');
|
|
+ nl = 1;
|
|
unlock(&llock);
|
|
}
|
|
|
|
@@ -770,7 +771,7 @@ void prepareIO(void (*rfunc)(int), void
|
|
(void)mkfifo(fifo_name, 0600);
|
|
errno = 0;
|
|
if (!stat(fifo_name, &st) && S_ISFIFO(st.st_mode)) {
|
|
- if ((fdfifo = open(fifo_name, O_RDONLY|O_NOCTTY|O_CLOEXEC)) < 0)
|
|
+ if ((fdfifo = open(fifo_name, O_RDWR|O_NOCTTY|O_CLOEXEC)) < 0)
|
|
warn("can not open named fifo %s: %s\n", fifo_name, strerror(errno));
|
|
}
|
|
}
|
|
@@ -1266,7 +1267,7 @@ char * fetchtty(const pid_t pid, const p
|
|
while ((fscanf(fc, "%*s %*s (%[^)]) %d:%d", &fbuf[0], &maj, &min) == 3)) {
|
|
if (!strchr(fbuf, 'E'))
|
|
continue;
|
|
- if (strchr(fbuf, '*')) {
|
|
+ if (strchr(fbuf, 'C')) {
|
|
dev = makedev(maj, min);
|
|
break;
|
|
}
|
|
@@ -1327,8 +1328,9 @@ void secondtty(struct console *restrict
|
|
|
|
tail = cons;
|
|
|
|
- if ((fc = fopen("/proc/tty/consoles", "r"))) {
|
|
- int maj, min, flags;
|
|
+ if ((fc = fopen("/proc/consoles", "r"))) {
|
|
+ unsigned int maj, min;
|
|
+ int flags;
|
|
struct stat st;
|
|
char fbuf[16];
|
|
|
|
@@ -1341,13 +1343,13 @@ void secondtty(struct console *restrict
|
|
error("can not opendir(/dev): %s\n", strerror(errno));
|
|
pushd("/dev");
|
|
|
|
- while ((fscanf(fc, "%*s %*s (%[^)]) %d:%d", &fbuf[0], &maj, &min) == 3)) {
|
|
+ while ((fscanf(fc, "%*s %*s (%[^)]) %u:%u", &fbuf[0], &maj, &min) == 3)) {
|
|
struct console *restrict newc;
|
|
dev_t dev;
|
|
|
|
if (!strchr(fbuf, 'E'))
|
|
continue;
|
|
- if (strchr(fbuf, '*'))
|
|
+ if (strchr(fbuf, 'C'))
|
|
continue;
|
|
dev = makedev(maj, min);
|
|
|
|
--- showconsole.8
|
|
+++ showconsole.8 2010-11-09 15:26:29.038362757 +0000
|
|
@@ -22,8 +22,7 @@ Setconsole \- redirect system console ou
|
|
.SH DESCRIPTION
|
|
.B showconsole
|
|
determines the real character device of
|
|
-the current
|
|
-.BR stdin.
|
|
+the current system console.
|
|
This can be used on
|
|
.I /dev/console
|
|
as current character device to
|
|
--- showconsole.c
|
|
+++ showconsole.c 2010-10-25 13:08:25.583937937 +0000
|
|
@@ -19,6 +19,7 @@
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <errno.h>
|
|
+#include <signal.h>
|
|
#include "libconsole.h"
|
|
|
|
/*
|