diff --git a/src/add-ons/kernel/drivers/tty/tty.cpp b/src/add-ons/kernel/drivers/tty/tty.cpp index ed6eebd9c0..5c4b6dd05c 100644 --- a/src/add-ons/kernel/drivers/tty/tty.cpp +++ b/src/add-ons/kernel/drivers/tty/tty.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -1739,6 +1740,26 @@ tty_ioctl(tty_cookie* cookie, uint32 op, void* buffer, size_t length) return B_OK; } + case FIONREAD: + { + int toRead = 0; + + // release the mutex and grab a read lock + locker.Unlock(); + ReaderLocker readLocker(cookie); + + status_t status = readLocker.AcquireReader(0, 1); + if (status >= B_OK) + toRead = readLocker.AvailableBytes(); + else if(status != B_WOULD_BLOCK) + return status; + + if (user_memcpy(buffer, &toRead, sizeof(int)) != B_OK) + return B_BAD_ADDRESS; + + return B_OK; + } + case TCWAITEVENT: // BeOS (uint*) // wait for event (timeout if !NULL) case TCVTIME: // BeOS (bigtime_t*) set highrez VTIME