diff --git a/src/add-ons/kernel/drivers/tty/master.cpp b/src/add-ons/kernel/drivers/tty/master.cpp index 8ee58c3ef7..c33321bc85 100644 --- a/src/add-ons/kernel/drivers/tty/master.cpp +++ b/src/add-ons/kernel/drivers/tty/master.cpp @@ -104,7 +104,20 @@ master_ioctl(void *_cookie, uint32 op, void *buffer, size_t length) master_cookie *cookie = (master_cookie *)_cookie; TRACE(("master_ioctl: cookie %p, op %lu, buffer %p, length %lu\n", _cookie, op, buffer, length)); - return tty_ioctl(cookie->tty, op, buffer, length); + + switch (op) { + case B_SET_BLOCKING_IO: + cookie->open_mode &= ~O_NONBLOCK; + break; + case B_SET_NONBLOCKING_IO: + cookie->open_mode |= O_NONBLOCK; + break; + + default: + return tty_ioctl(cookie->tty, op, buffer, length); + } + + return B_OK; } diff --git a/src/add-ons/kernel/drivers/tty/slave.cpp b/src/add-ons/kernel/drivers/tty/slave.cpp index 01360f8654..c7a56f1a5a 100644 --- a/src/add-ons/kernel/drivers/tty/slave.cpp +++ b/src/add-ons/kernel/drivers/tty/slave.cpp @@ -96,7 +96,20 @@ slave_ioctl(void *_cookie, uint32 op, void *buffer, size_t length) slave_cookie *cookie = (slave_cookie *)_cookie; TRACE(("slave_ioctl: cookie %p, op %lu, buffer %p, length %lu\n", _cookie, op, buffer, length)); - return tty_ioctl(cookie->tty, op, buffer, length); + + switch (op) { + case B_SET_BLOCKING_IO: + cookie->open_mode &= ~O_NONBLOCK; + break; + case B_SET_NONBLOCKING_IO: + cookie->open_mode |= O_NONBLOCK; + break; + + default: + return tty_ioctl(cookie->tty, op, buffer, length); + } + + return B_OK; }