From fc56849d679ac766faa2441dd0ac0976f9ba3174 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 15 Jul 2012 12:49:09 +0800 Subject: [PATCH] Kernel - Debugging AxWin3 error --- KernelLand/Kernel/drv/vterm.c | 13 +++++++------ KernelLand/Kernel/vfs/io.c | 18 +++++++++++++++--- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/KernelLand/Kernel/drv/vterm.c b/KernelLand/Kernel/drv/vterm.c index 7d30511f..a6a1c66d 100644 --- a/KernelLand/Kernel/drv/vterm.c +++ b/KernelLand/Kernel/drv/vterm.c @@ -353,8 +353,7 @@ int VT_Root_IOCtl(tVFS_Node *Node, int Id, void *Data) */ size_t VT_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) { - int pos = 0; - int avail; + int pos, avail; tVTerm *term = &gVT_Terminals[ Node->Inode ]; Uint32 *codepoint_buf = Buffer; Uint32 *codepoint_in; @@ -373,9 +372,10 @@ size_t VT_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) avail = term->InputWrite - term->InputRead; if(avail < 0) avail += MAX_INPUT_CHARS8; - if(avail > Length - pos) - avail = Length - pos; + if(avail > Length) + avail = Length; + pos = 0; while( avail -- ) { ((char*)Buffer)[pos] = term->InputBuffer[term->InputRead]; @@ -395,12 +395,13 @@ size_t VT_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer) if(avail < 0) avail += MAX_INPUT_CHARS32; Length /= 4; - if(avail > Length - pos) - avail = Length - pos; + if(avail > Length) + avail = Length; codepoint_in = (void*)term->InputBuffer; codepoint_buf = Buffer; + pos = 0; while( avail -- ) { codepoint_buf[pos] = codepoint_in[term->InputRead]; diff --git a/KernelLand/Kernel/vfs/io.c b/KernelLand/Kernel/vfs/io.c index e7a2a068..dacf720e 100644 --- a/KernelLand/Kernel/vfs/io.c +++ b/KernelLand/Kernel/vfs/io.c @@ -20,12 +20,24 @@ Uint64 VFS_Read(int FD, Uint64 Length, void *Buffer) ENTER("iFD XLength pBuffer", FD, Length, Buffer); h = VFS_GetHandle(FD); - if(!h) LEAVE_RET('i', -1); + if(!h) { + LOG("Bad Handle"); + LEAVE_RET('i', -1); + } - if( !(h->Mode & VFS_OPENFLAG_READ) || h->Node->Flags & VFS_FFLAG_DIRECTORY ) + if( !(h->Mode & VFS_OPENFLAG_READ) ) { + LOG("Bad mode"); + LEAVE_RET('i', -1); + } + if( (h->Node->Flags & VFS_FFLAG_DIRECTORY) ) { + LOG("Reading directory"); LEAVE_RET('i', -1); + } - if(!h->Node->Type || !h->Node->Type->Read) LEAVE_RET('i', 0); + if(!h->Node->Type || !h->Node->Type->Read) { + LOG("No read method"); + LEAVE_RET('i', -1); + } ret = h->Node->Type->Read(h->Node, h->Position, Length, Buffer); if(ret == -1) LEAVE_RET('i', -1); -- 2.20.1