Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d2f7f05 authored by Josh Poimboeuf's avatar Josh Poimboeuf Committed by Steven Rostedt
Browse files

ktest: Enable user input to the console

Allow the user to send input to the console by putting the terminal in
cbreak mode (to allow reading stdin one character at a time) and copying
all stdin data to the console's pty.

Link: http://lkml.kernel.org/r/bb1bbe7d202c95a3ce7894cfffdd8c725875978e.1422473610.git.jpoimboe@redhat.com



Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parent 9f2cdcbb
Loading
Loading
Loading
Loading
+36 −15
Original line number Diff line number Diff line
@@ -178,7 +178,7 @@ my $checkout;
my $localversion;
my $iteration = 0;
my $successes = 0;
my $stty;
my $stty_orig;

my $bisect_good;
my $bisect_bad;
@@ -1458,7 +1458,11 @@ sub open_console {
    my $pid;

    # save terminal settings
    $stty = `stty -g`;
    $stty_orig = `stty -g`;

    # place terminal in cbreak mode so that stdin can be read one character at
    # a time without having to wait for a newline
    system("stty -icanon -echo -icrnl");

    create_pty($ptm, $pts);

@@ -1487,7 +1491,7 @@ sub close_console {
    close($fp);

    # restore terminal settings
    system("stty $stty");
    system("stty $stty_orig");
}

sub start_monitor {
@@ -1827,7 +1831,9 @@ sub wait_for_input
{
    my ($fp, $time) = @_;
    my $rin;
    my $ready;
    my $rout;
    my $nr;
    my $buf;
    my $line;
    my $ch;

@@ -1837,7 +1843,21 @@ sub wait_for_input

    $rin = '';
    vec($rin, fileno($fp), 1) = 1;
    ($ready, $time) = select($rin, undef, undef, $time);
    vec($rin, fileno(\*STDIN), 1) = 1;

    while (1) {
	$nr = select($rout=$rin, undef, undef, $time);

	if ($nr <= 0) {
	    return undef;
	}

	# copy data from stdin to the console
	if (vec($rout, fileno(\*STDIN), 1) == 1) {
	    sysread(\*STDIN, $buf, 1000);
	    syswrite($fp, $buf, 1000);
	    next;
	}

	$line = "";

@@ -1853,6 +1873,7 @@ sub wait_for_input

	return $line;
    }
}

sub reboot_to {
    if (defined($switch_to_test)) {