mirror of
https://github.com/troglobit/finit.git
synced 2026-11-15 19:13:11 +00:00
Drop experimental multiple console output support
It has barely worked and only caused more problems than solved annoying issues. We have one console for output, /dev/console, which the kernel sets up for us. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
e18d63df4a
commit
473116f603
1 file changed
+2
-97
+2
-97
@@ -68,106 +68,13 @@ static const char *status2[] = STATUS_CLASS;
|
|||||||
#define CHOOSE(x,y,z) z
|
#define CHOOSE(x,y,z) z
|
||||||
static const char *color[] = STATUS_CLASS;
|
static const char *color[] = STATUS_CLASS;
|
||||||
|
|
||||||
/*
|
|
||||||
* System consoles, can be given multiple times on the kernel cmdline.
|
|
||||||
* We support only three currently. If none are given on the cmdline
|
|
||||||
* we probe /sys/class/tty/console/active and use the first (default).
|
|
||||||
*/
|
|
||||||
#define MAX_CONS 3
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Linux gives us stdio using /dev/console by default. This is the
|
|
||||||
* first one listed in /sys/class/tty/console/active so we don't need
|
|
||||||
* to register that again.
|
|
||||||
*
|
|
||||||
* NOTE: the getty @console is handled separately in tty.c, for now.
|
|
||||||
*/
|
|
||||||
static char *consoles[MAX_CONS] = { "/dev/console" };
|
|
||||||
static int fds[MAX_CONS] = { 2 };
|
|
||||||
static int num_cons = 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* System default console is always the first
|
|
||||||
*/
|
|
||||||
char *console(void)
|
char *console(void)
|
||||||
{
|
{
|
||||||
return consoles[0];
|
return _PATH_CONSOLE;
|
||||||
}
|
|
||||||
|
|
||||||
static void add_console(char *cons)
|
|
||||||
{
|
|
||||||
char path[80];
|
|
||||||
char *ptr;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (num_cons == NELEMS(fds)) {
|
|
||||||
_e("too many consoles, max %d supported", NELEMS(fds));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* drop any options */
|
|
||||||
ptr = strchr(cons, ',');
|
|
||||||
if (ptr)
|
|
||||||
*ptr = 0;
|
|
||||||
|
|
||||||
if (!strncmp(cons, "/dev/", 5))
|
|
||||||
cons += 5;
|
|
||||||
|
|
||||||
snprintf(path, sizeof(path), "/dev/%s", cons);
|
|
||||||
|
|
||||||
/* check for and skip duplicates */
|
|
||||||
for (i = 0; i < num_cons; i++) {
|
|
||||||
if (string_compare(path, consoles[i]))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* this requires we have /dev mounted && a device there */
|
|
||||||
fds[num_cons] = open(path, O_WRONLY | O_NOCTTY);
|
|
||||||
if (fds[num_cons] < 0) {
|
|
||||||
_pe("Failed opening console %s", path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
consoles[num_cons] = strdup(path);
|
|
||||||
num_cons++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The main console is the first listed in /sys/class/tty/console/active
|
|
||||||
* we already have that open from the kernel as /dev/console, which is
|
|
||||||
* all we need to display progress and debug messages. If there are any
|
|
||||||
* more we add them as secondary consoles for displaying progress etc.
|
|
||||||
*
|
|
||||||
* The getty code in tty.c is separate from this, for now.
|
|
||||||
*/
|
|
||||||
static void find_active_consoles(void)
|
|
||||||
{
|
|
||||||
char *cons, *ptr, *tok;
|
|
||||||
char buf[512];
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
fp = fopen("/sys/class/tty/console/active", "r");
|
|
||||||
if (!fp) {
|
|
||||||
fallback:
|
|
||||||
_d("Using fallback /dev/console");
|
|
||||||
add_console("console");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ptr = fgets(buf, sizeof(buf), fp);
|
|
||||||
fclose(fp);
|
|
||||||
if (!ptr)
|
|
||||||
goto fallback;
|
|
||||||
|
|
||||||
cons = chomp(ptr);
|
|
||||||
_d("Using these system consoles: %s", cons);
|
|
||||||
strtok(cons, " \t");
|
|
||||||
while ((tok = strtok(NULL, " \t")))
|
|
||||||
add_console(tok);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void console_init(void)
|
void console_init(void)
|
||||||
{
|
{
|
||||||
find_active_consoles();
|
|
||||||
ttinit();
|
ttinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,14 +84,12 @@ ssize_t cprintf(const char *fmt, ...)
|
|||||||
char buf[len < 256 ? 256 : len];
|
char buf[len < 256 ? 256 : len];
|
||||||
size_t size;
|
size_t size;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int i;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
size = vsnprintf(buf, sizeof(buf), fmt, ap);
|
size = vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
for (i = 0; i < num_cons; i++)
|
dprint(STDERR_FILENO, buf, size);
|
||||||
dprint(fds[i], buf, size);
|
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user