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 37int setconsole_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 38int 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