~mmach/netext73/busybox

« back to all changes in this revision

Viewing changes to .pc/platform-linux.diff/console-tools/setconsole.c

  • Committer: mmach
  • Date: 2023-07-06 04:40:25 UTC
  • Revision ID: netbit73@gmail.com-20230706044025-2ia9985i8wzdn2a7
1.36.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* vi: set sw=4 ts=4: */
 
2
/*
 
3
 * setconsole.c - redirect system console output
 
4
 *
 
5
 * Copyright (C) 2004,2005  Enrik Berkhan <Enrik.Berkhan@inka.de>
 
6
 * Copyright (C) 2008 Bernhard Reutner-Fischer
 
7
 *
 
8
 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
 
9
 */
 
10
//config:config SETCONSOLE
 
11
//config:       bool "setconsole (3.6 kb)"
 
12
//config:       default y
 
13
//config:       help
 
14
//config:       Redirect writes to /dev/console to another device,
 
15
//config:       like the current tty while logged in via telnet.
 
16
//config:       This does not redirect kernel log, only writes
 
17
//config:       from user space.
 
18
//config:
 
19
//config:config FEATURE_SETCONSOLE_LONG_OPTIONS
 
20
//config:       bool "Enable long options"
 
21
//config:       default y
 
22
//config:       depends on SETCONSOLE && LONG_OPTS
 
23
 
 
24
//applet:IF_SETCONSOLE(APPLET_NOEXEC(setconsole, setconsole, BB_DIR_SBIN, BB_SUID_DROP, setconsole))
 
25
 
 
26
//kbuild:lib-$(CONFIG_SETCONSOLE) += setconsole.o
 
27
 
 
28
//usage:#define setconsole_trivial_usage
 
29
//usage:       "[-r] [DEVICE]"
 
30
//usage:#define setconsole_full_usage "\n\n"
 
31
//usage:       "Make writes to /dev/console appear on DEVICE (default: /dev/tty)."
 
32
//usage:   "\n""Does not redirect kernel log output or reads from /dev/console."
 
33
//usage:   "\n"
 
34
//usage:   "\n""        -r      Reset: writes to /dev/console go to kernel log tty(s)"
 
35
 
 
36
/* It was a bbox-specific invention, but SUSE does have a similar utility.
 
37
 * SUSE has no -r option, though.
 
38
 */
 
39
 
 
40
#include "libbb.h"
 
41
 
 
42
int setconsole_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 
43
int setconsole_main(int argc UNUSED_PARAM, char **argv)
 
44
{
 
45
        const char *device = CURRENT_TTY;
 
46
        int reset;
 
47
 
 
48
        /* at most one non-option argument */
 
49
        reset = getopt32(argv, "^" "r" "\0" "?1");
 
50
 
 
51
        argv += 1 + reset;
 
52
        if (*argv) {
 
53
                device = *argv;
 
54
        } else {
 
55
                if (reset)
 
56
                        device = DEV_CONSOLE;
 
57
        }
 
58
 
 
59
//TODO: fails if TIOCCONS redir is already active to some tty.
 
60
//I think SUSE version first does TIOCCONS on /dev/console fd (iow: resets)
 
61
//then TIOCCONS to new tty?
 
62
        xioctl(xopen(device, O_WRONLY), TIOCCONS, NULL);
 
63
        return EXIT_SUCCESS;
 
64
}