blob: 58057268d29eb5f2622ab9686e58afb346650730
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" |
12 | //config: default y |
13 | //config: select PLATFORM_LINUX |
14 | //config: help |
15 | //config: This program redirects the system console to another device, |
16 | //config: like the current tty while logged in via telnet. |
17 | //config: |
18 | //config:config FEATURE_SETCONSOLE_LONG_OPTIONS |
19 | //config: bool "Enable long options" |
20 | //config: default y |
21 | //config: depends on SETCONSOLE && LONG_OPTS |
22 | //config: help |
23 | //config: Support long options for the setconsole applet. |
24 | |
25 | //applet:IF_SETCONSOLE(APPLET(setconsole, BB_DIR_SBIN, BB_SUID_DROP)) |
26 | |
27 | //kbuild:lib-$(CONFIG_SETCONSOLE) += setconsole.o |
28 | |
29 | //usage:#define setconsole_trivial_usage |
30 | //usage: "[-r" IF_FEATURE_SETCONSOLE_LONG_OPTIONS("|--reset") "] [DEVICE]" |
31 | //usage:#define setconsole_full_usage "\n\n" |
32 | //usage: "Redirect system console output to DEVICE (default: /dev/tty)\n" |
33 | //usage: "\n -r Reset output to /dev/console" |
34 | |
35 | #include "libbb.h" |
36 | |
37 | int setconsole_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
38 | int setconsole_main(int argc UNUSED_PARAM, char **argv) |
39 | { |
40 | const char *device = CURRENT_TTY; |
41 | bool reset; |
42 | |
43 | #if ENABLE_FEATURE_SETCONSOLE_LONG_OPTIONS |
44 | static const char setconsole_longopts[] ALIGN1 = |
45 | "reset\0" No_argument "r" |
46 | ; |
47 | applet_long_options = setconsole_longopts; |
48 | #endif |
49 | /* at most one non-option argument */ |
50 | opt_complementary = "?1"; |
51 | reset = getopt32(argv, "r"); |
52 | |
53 | argv += 1 + reset; |
54 | if (*argv) { |
55 | device = *argv; |
56 | } else { |
57 | if (reset) |
58 | device = DEV_CONSOLE; |
59 | } |
60 | |
61 | xioctl(xopen(device, O_WRONLY), TIOCCONS, NULL); |
62 | return EXIT_SUCCESS; |
63 | } |
64 |