From 3116b031dc6fc1ebce93ee10b2d22fe3506ac5f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 25 Feb 2011 19:58:25 +0000 Subject: [PATCH] FIONBIO and FIONREAD don't apply to directories, files, attributes: returns ENOTTY in these cases. This fixes #7279. ENOTTY could also be replaced with a B_ error code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40686 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/fd.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/system/kernel/fs/fd.cpp b/src/system/kernel/fs/fd.cpp index 4bc7bf9a53..06b3b0cf04 100644 --- a/src/system/kernel/fs/fd.cpp +++ b/src/system/kernel/fs/fd.cpp @@ -12,6 +12,7 @@ #include #include +#include #include @@ -515,6 +516,17 @@ fd_ioctl(bool kernelFD, int fd, uint32 op, void* buffer, size_t length) if (descriptor == NULL) return B_FILE_ERROR; + if (op == FIONBIO || op == FIONREAD) { + switch (descriptor->type) { + case FDTYPE_FILE: + case FDTYPE_DIR: + case FDTYPE_ATTR_DIR: + case FDTYPE_ATTR: + put_fd(descriptor); + return ENOTTY; + } + } + if (descriptor->ops->fd_ioctl) status = descriptor->ops->fd_ioctl(descriptor, op, buffer, length); else