Bump to version 1.22.1
[platform/upstream/busybox.git] / libbb / get_console.c
index 0dc24cb..9b6407b 100644 (file)
@@ -5,33 +5,13 @@
  * Copyright (C) many different people.  If you wrote this, please
  * acknowledge your work.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
 
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
 #include "libbb.h"
 
-
-
-/* From <linux/kd.h> */ 
-static const int KDGKBTYPE = 0x4B33;  /* get keyboard type */
-
+/* From <linux/kd.h> */
+enum { KDGKBTYPE = 0x4B33 };  /* get keyboard type */
 
 static int open_a_console(const char *fnam)
 {
@@ -56,44 +36,45 @@ static int open_a_console(const char *fnam)
  * We try several things because opening /dev/console will fail
  * if someone else used X (which does a chown on /dev/console).
  */
-
-int get_console_fd(void)
+int FAST_FUNC get_console_fd_or_die(void)
 {
-       int fd;
-
-       static const char * const choise_console_names[] = {
-               CONSOLE_DEV, CURRENT_VC, CURRENT_TTY
+       static const char *const console_names[] = {
+               DEV_CONSOLE, CURRENT_VC, CURRENT_TTY
        };
 
+       int fd;
+
        for (fd = 2; fd >= 0; fd--) {
                int fd4name;
-               int choise_fd;
+               int choice_fd;
                char arg;
 
-               fd4name = open_a_console(choise_console_names[fd]);
      chk_std:
-               choise_fd = fd4name >= 0 ? fd4name : fd;
+               fd4name = open_a_console(console_names[fd]);
+ chk_std:
+               choice_fd = (fd4name >= 0 ? fd4name : fd);
 
                arg = 0;
-               if (ioctl(choise_fd, KDGKBTYPE, &arg) == 0)
-                       return choise_fd;
-               if(fd4name >= 0) {
+               if (ioctl(choice_fd, KDGKBTYPE, &arg) == 0)
+                       return choice_fd;
+               if (fd4name >= 0) {
                        close(fd4name);
                        fd4name = -1;
                        goto chk_std;
                }
        }
 
-       bb_error_msg("Couldn't get a file descriptor referring to the console");
-       return fd;                      /* total failure */
+       bb_error_msg_and_die("can't open console");
+       /*return fd; - total failure */
 }
 
+/* From <linux/vt.h> */
+enum {
+       VT_ACTIVATE = 0x5606,   /* make vt active */
+       VT_WAITACTIVE = 0x5607  /* wait for vt active */
+};
 
-/* END CODE */
-/*
-Local Variables:
-c-file-style: "linux"
-c-basic-offset: 4
-tab-width: 4
-End:
-*/
+void FAST_FUNC console_make_active(int fd, const int vt_num)
+{
+       xioctl(fd, VT_ACTIVATE, (void *)(ptrdiff_t)vt_num);
+       xioctl(fd, VT_WAITACTIVE, (void *)(ptrdiff_t)vt_num);
+}