/* vi: set sw=4 ts=4: */
/*
 * setlogcons: Send kernel messages to the current console or to console N
 *
 * Copyright (C) 2006 by Jan Kiszka <jan.kiszka@web.de>
 *
 * Based on setlogcons (kbd-1.12) by Andries E. Brouwer
 *
 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
 */
//config:config SETLOGCONS
//config:	bool "setlogcons"
//config:	default y
//config:	select PLATFORM_LINUX
//config:	help
//config:	  This program redirects the output console of kernel messages.

//applet:IF_SETLOGCONS(APPLET(setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP))

//kbuild:lib-$(CONFIG_SETLOGCONS) += setlogcons.o

//usage:#define setlogcons_trivial_usage
//usage:       "[N]"
//usage:#define setlogcons_full_usage "\n\n"
//usage:       "Redirect the kernel output to console N. Default:0 (current console)"

#include "libbb.h"

int setlogcons_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int setlogcons_main(int argc UNUSED_PARAM, char **argv)
{
	struct {
		char fn;
		char subarg;
	} arg = {
		11, /* redirect kernel messages */
		0   /* to specified console (current as default) */
	};

	if (argv[1])
		arg.subarg = xatou_range(argv[1], 0, 63);

	xioctl(xopen(VC_1, O_RDONLY), TIOCLINUX, &arg);

	return EXIT_SUCCESS;
}
