From bad56956885d143db0fa6e8d5f8c363808c15426 Mon Sep 17 00:00:00 2001 From: Tormod Volden Date: Sun, 29 May 2016 11:34:31 +0200 Subject: [PATCH] Allow return value passing from ioctl Fixes lost values from vt_ioctl(). Signed-off-by: Tormod Volden --- Kernel/devio.c | 11 +++++------ Kernel/syscall_fs.c | 4 +--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/Kernel/devio.c b/Kernel/devio.c index 9051cd21..ae82ec41 100644 --- a/Kernel/devio.c +++ b/Kernel/devio.c @@ -285,18 +285,17 @@ int d_close(uint16_t dev) int d_ioctl(uint16_t dev, uint16_t request, char *data) { + int ret; + if (!validdev(dev)) { udata.u_error = ENXIO; return -1; } - if ((*dev_tab[major(dev)].dev_ioctl) (minor(dev), request, data)) { - if (!udata.u_error) // maybe the ioctl routine might set this? + ret = (*dev_tab[major(dev)].dev_ioctl) (minor(dev), request, data); + if (ret == -1 && !udata.u_error) // maybe the ioctl routine might set this? udata.u_error = ENOTTY; - return -1; - } - - return 0; + return ret; } int d_flush(uint16_t dev) diff --git a/Kernel/syscall_fs.c b/Kernel/syscall_fs.c index 90e877a2..43d13348 100644 --- a/Kernel/syscall_fs.c +++ b/Kernel/syscall_fs.c @@ -271,9 +271,7 @@ arg_t _ioctl(void) dev = ino->c_node.i_addr[0]; /* top bit of request is reserved for kernel originated magic */ - if (d_ioctl(dev, request & 0x7FFF, data)) - return -1; - return (0); + return d_ioctl(dev, request & 0x7FFF, data); } #undef fd -- 2.34.1