042de8649f2dff5ae20412417d5f54a1754850f1
[oweals/busybox.git] / deallocvt.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * disalloc.c - aeb - 940501 - Disallocate virtual terminal(s)
4  * Renamed deallocvt.
5  */
6 #include "internal.h"
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <fcntl.h>
10 #include <sys/types.h>
11 #include <sys/ioctl.h>
12
13 /* From <linux/vt.h> */
14 #define VT_DISALLOCATE  0x5608  /* free memory associated to vt */
15
16 const char deallocvt_usage[] =
17         "deallocvt N\n"
18 #ifndef BB_FEATURE_TRIVIAL_HELP
19          "\nDeallocate unused virtual terminal /dev/ttyN\n"
20 #endif
21          ;
22
23 int deallocvt_main(int argc, char *argv[])
24 {
25         int fd, num, i;
26
27         if ((argc != 2) || (**(argv + 1) == '-'))
28                 usage(deallocvt_usage);
29
30         fd = get_console_fd("/dev/console");
31
32         if (argc == 1) {
33                 /* deallocate all unused consoles */
34                 if (ioctl(fd, VT_DISALLOCATE, 0)) {
35                         perror("VT_DISALLOCATE");
36                         exit( FALSE);
37                 }
38         } else
39                 for (i = 1; i < argc; i++) {
40                         num = atoi(argv[i]);
41                         if (num == 0)
42                                 errorMsg("0: illegal VT number\n");
43                         else if (num == 1)
44                                 errorMsg("VT 1 cannot be deallocated\n");
45                         else if (ioctl(fd, VT_DISALLOCATE, num)) {
46                                 perror("VT_DISALLOCATE");
47                                 errorMsg("could not deallocate console %d\n", num);
48                                 exit( FALSE);
49                         }
50                 }
51         return( TRUE);
52 }