mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-25 20:33:08 +00:00
Simplify looping in readb
This commit is contained in:
parent
edab366d3a
commit
32d1b3d7cb
1 changed files with 4 additions and 15 deletions
|
@ -67,12 +67,7 @@ void input_common_init(interrupt_func_t func) { interrupt_handler = func; }
|
||||||
/// Internal function used by input_common_readch to read one byte from fd 0. This function should
|
/// Internal function used by input_common_readch to read one byte from fd 0. This function should
|
||||||
/// only be called by input_common_readch().
|
/// only be called by input_common_readch().
|
||||||
static char_event_t readb() {
|
static char_event_t readb() {
|
||||||
// do_loop must be set on every path through the loop; leaving it uninitialized allows the
|
for (;;) {
|
||||||
// static analyzer to assist in catching mistakes.
|
|
||||||
unsigned char arr[1];
|
|
||||||
bool do_loop;
|
|
||||||
|
|
||||||
do {
|
|
||||||
fd_set fdset;
|
fd_set fdset;
|
||||||
int fd_max = 0;
|
int fd_max = 0;
|
||||||
int ioport = iothread_port();
|
int ioport = iothread_port();
|
||||||
|
@ -114,16 +109,11 @@ static char_event_t readb() {
|
||||||
return *mc;
|
return *mc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
do_loop = true;
|
|
||||||
} else {
|
} else {
|
||||||
// The terminal has been closed.
|
// The terminal has been closed.
|
||||||
return char_event_type_t::eof;
|
return char_event_type_t::eof;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Assume we loop unless we see a character in stdin.
|
|
||||||
do_loop = true;
|
|
||||||
|
|
||||||
// Check to see if we want a universal variable barrier.
|
// Check to see if we want a universal variable barrier.
|
||||||
bool barrier_from_poll = notifier.poll();
|
bool barrier_from_poll = notifier.poll();
|
||||||
bool barrier_from_readability = false;
|
bool barrier_from_readability = false;
|
||||||
|
@ -147,18 +137,17 @@ static char_event_t readb() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FD_ISSET(STDIN_FILENO, &fdset)) {
|
if (FD_ISSET(STDIN_FILENO, &fdset)) {
|
||||||
|
unsigned char arr[1];
|
||||||
if (read_blocked(0, arr, 1) != 1) {
|
if (read_blocked(0, arr, 1) != 1) {
|
||||||
// The teminal has been closed.
|
// The teminal has been closed.
|
||||||
return char_event_type_t::eof;
|
return char_event_type_t::eof;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We read from stdin, so don't loop.
|
// We read from stdin, so don't loop.
|
||||||
do_loop = false;
|
return arr[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while (do_loop);
|
}
|
||||||
|
|
||||||
return arr[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the wait_on_escape_ms value in response to the fish_escape_delay_ms user variable being
|
// Update the wait_on_escape_ms value in response to the fish_escape_delay_ms user variable being
|
||||||
|
|
Loading…
Reference in a new issue