version 1.426, 2023/01/06 02:47:18 |
version 1.427, 2023/01/18 02:00:10 |
|
|
*/ |
*/ |
if (rfd != -1 && !isatty(rfd) && |
if (rfd != -1 && !isatty(rfd) && |
(val = fcntl(rfd, F_GETFL)) != -1 && !(val & O_NONBLOCK)) { |
(val = fcntl(rfd, F_GETFL)) != -1 && !(val & O_NONBLOCK)) { |
|
c->restore_flags[0] = val; |
c->restore_block |= CHANNEL_RESTORE_RFD; |
c->restore_block |= CHANNEL_RESTORE_RFD; |
set_nonblock(rfd); |
set_nonblock(rfd); |
} |
} |
if (wfd != -1 && !isatty(wfd) && |
if (wfd != -1 && !isatty(wfd) && |
(val = fcntl(wfd, F_GETFL)) != -1 && !(val & O_NONBLOCK)) { |
(val = fcntl(wfd, F_GETFL)) != -1 && !(val & O_NONBLOCK)) { |
|
c->restore_flags[1] = val; |
c->restore_block |= CHANNEL_RESTORE_WFD; |
c->restore_block |= CHANNEL_RESTORE_WFD; |
set_nonblock(wfd); |
set_nonblock(wfd); |
} |
} |
if (efd != -1 && !isatty(efd) && |
if (efd != -1 && !isatty(efd) && |
(val = fcntl(efd, F_GETFL)) != -1 && !(val & O_NONBLOCK)) { |
(val = fcntl(efd, F_GETFL)) != -1 && !(val & O_NONBLOCK)) { |
|
c->restore_flags[2] = val; |
c->restore_block |= CHANNEL_RESTORE_EFD; |
c->restore_block |= CHANNEL_RESTORE_EFD; |
set_nonblock(efd); |
set_nonblock(efd); |
} |
} |
|
|
if (fd == -1) |
if (fd == -1) |
return 0; |
return 0; |
|
|
if ((*fdp == c->rfd && (c->restore_block & CHANNEL_RESTORE_RFD) != 0) || |
/* restore blocking */ |
(*fdp == c->wfd && (c->restore_block & CHANNEL_RESTORE_WFD) != 0) || |
if (*fdp == c->rfd && |
(*fdp == c->efd && (c->restore_block & CHANNEL_RESTORE_EFD) != 0)) |
(c->restore_block & CHANNEL_RESTORE_RFD) != 0) |
(void)fcntl(*fdp, F_SETFL, 0); /* restore blocking */ |
(void)fcntl(*fdp, F_SETFL, c->restore_flags[0]); |
|
else if (*fdp == c->wfd && |
|
(c->restore_block & CHANNEL_RESTORE_WFD) != 0) |
|
(void)fcntl(*fdp, F_SETFL, c->restore_flags[1]); |
|
else if (*fdp == c->efd && |
|
(c->restore_block & CHANNEL_RESTORE_EFD) != 0) |
|
(void)fcntl(*fdp, F_SETFL, c->restore_flags[2]); |
|
|
if (*fdp == c->rfd) { |
if (*fdp == c->rfd) { |
c->io_want &= ~SSH_CHAN_IO_RFD; |
c->io_want &= ~SSH_CHAN_IO_RFD; |