X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=libbb%2Fget_console.c;h=74022b5437e35a174c1b885fa7f339193a3d2b4b;hb=04bb6b6a5af24f9a458132a5d002c54f901ae323;hp=0dc24cb7897c0e998a683ab7230054b40ae5cdaa;hpb=005f83adf511ab89296639abbef737ad4e5826f9;p=oweals%2Fbusybox.git diff --git a/libbb/get_console.c b/libbb/get_console.c index 0dc24cb78..74022b543 100644 --- a/libbb/get_console.c +++ b/libbb/get_console.c @@ -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 tarball for details. */ -#include -#include -#include -#include -#include #include "libbb.h" - - -/* From */ -static const int KDGKBTYPE = 0x4B33; /* get keyboard type */ - +/* From */ +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 */ +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); +}