blob: c0051dcc8c1d2a0f64e484bac80a726e5cd172b4
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 | |
11 | //usage:#define setconsole_trivial_usage |
12 | //usage: "[-r" IF_FEATURE_SETCONSOLE_LONG_OPTIONS("|--reset") "] [DEVICE]" |
13 | //usage:#define setconsole_full_usage "\n\n" |
14 | //usage: "Redirect system console output to DEVICE (default: /dev/tty)\n" |
15 | //usage: "\n -r Reset output to /dev/console" |
16 | |
17 | #include "libbb.h" |
18 | |
19 | int setconsole_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
20 | int setconsole_main(int argc UNUSED_PARAM, char **argv) |
21 | { |
22 | const char *device = CURRENT_TTY; |
23 | bool reset; |
24 | |
25 | #if ENABLE_FEATURE_SETCONSOLE_LONG_OPTIONS |
26 | static const char setconsole_longopts[] ALIGN1 = |
27 | "reset\0" No_argument "r" |
28 | ; |
29 | applet_long_options = setconsole_longopts; |
30 | #endif |
31 | /* at most one non-option argument */ |
32 | opt_complementary = "?1"; |
33 | reset = getopt32(argv, "r"); |
34 | |
35 | argv += 1 + reset; |
36 | if (*argv) { |
37 | device = *argv; |
38 | } else { |
39 | if (reset) |
40 | device = DEV_CONSOLE; |
41 | } |
42 | |
43 | xioctl(xopen(device, O_WRONLY), TIOCCONS, NULL); |
44 | return EXIT_SUCCESS; |
45 | } |
46 |