- if (-1 == (fd = open_a_console("/dev/console")))
- return -1;
- else
- return fd;
- fd = open_a_console(CURRENT_TTY);
- if (fd >= 0)
- return fd;
-
- fd = open_a_console(CURRENT_VC);
- if (fd >= 0)
- return fd;
-
- fd = open_a_console(CONSOLE_DEV);
- if (fd >= 0)
- return fd;
-
- for (fd = 0; fd < 3; fd++)
- if (is_a_console(fd))
- return fd;
+ static const char * const choise_console_names[] = {
+ CONSOLE_DEV, CURRENT_VC, CURRENT_TTY
+ };
+
+ for (fd = 2; fd >= 0; fd--) {
+ int fd4name;
+ int choise_fd;
+ char arg;
+
+ fd4name = open_a_console(choise_console_names[fd]);
+ chk_std:
+ choise_fd = fd4name >= 0 ? fd4name : fd;
+
+ arg = 0;
+ if (ioctl(choise_fd, KDGKBTYPE, &arg) == 0)
+ return choise_fd;
+ if(fd4name >= 0) {
+ close(fd4name);
+ fd4name = -1;
+ goto chk_std;
+ }
+ }