1/* vi: set sw=4 ts=4: */
2/*
3 * Disallocate virtual terminal(s)
4 *
5 * Copyright (C) 2003 by Tito Ragusa <farmatito@tiscali.it>
6 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
7 *
8 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
9 */
10
11/* no options, no getopt */
12
13#include "libbb.h"
14
15/* From <linux/vt.h> */
16enum { VT_DISALLOCATE = 0x5608 }; /* free memory associated to vt */
17
18int deallocvt_main(int argc, char **argv);
19int deallocvt_main(int argc, char **argv)
20{
21	/* num = 0 deallocate all unused consoles */
22	int num = 0;
23
24	switch (argc) {
25	case 2:
26		num = xatou_range(argv[1], 1, 63);
27		/* Fallthrough */
28	case 1:
29		break;
30	default:
31		bb_show_usage();
32	}
33
34	/* double cast suppresses "cast to ptr from int of different size */
35	xioctl(get_console_fd(), VT_DISALLOCATE, (void *)(ptrdiff_t)num);
36	return EXIT_SUCCESS;
37}
38