X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fpty.c;h=8f4302d21ff0e776cf757447a5a447b5c4db8109;hb=a580a34d1314a85534ae51a2b62114127fe03c3b;hp=abfd9d14a26a258159d4029f751240590c5a7399;hpb=5c29fcc13d3db145e00c01f88d0a584966c6bc38;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/pty.c b/KernelLand/Kernel/drv/pty.c index abfd9d14..8f4302d2 100644 --- a/KernelLand/Kernel/drv/pty.c +++ b/KernelLand/Kernel/drv/pty.c @@ -5,7 +5,7 @@ * drv/pty.c * - Pseudo Terminals */ -#define DEBUG 1 +#define DEBUG 0 #include #include #include @@ -104,7 +104,8 @@ tDevFS_Driver gPTY_Driver = { .Name = "pts", .RootNode = { .Flags = VFS_FFLAG_DIRECTORY, - .Type = &gPTY_NodeType_Root + .Type = &gPTY_NodeType_Root, + .Size = -1 } }; int giPTY_NumCount; @@ -434,37 +435,42 @@ size_t PTY_SendInput(tPTY *PTY, const char *Input, size_t Length) int PTY_ReadDir(tVFS_Node *Node, int Pos, char Name[FILENAME_MAX]) { tPTY *pty = NULL; - if( Pos < giPTY_NumCount * 2 ) + int idx = Pos; + if( idx < giPTY_NumCount * 2 ) { RWLock_AcquireRead(&glPTY_NumPTYs); for( pty = gpPTY_FirstNumPTY; pty; pty = pty->Next ) { - if( Pos < 2 ) + if( idx < 2 ) break; - Pos -= 2; + idx -= 2; } RWLock_Release(&glPTY_NumPTYs); } - else if( Pos < (giPTY_NumCount + giPTY_NamedCount) * 2 ) + else if( idx < (giPTY_NumCount + giPTY_NamedCount) * 2 ) { + idx -= giPTY_NumCount*2; RWLock_AcquireRead(&glPTY_NamedPTYs); for( pty = gpPTY_FirstNamedPTY; pty; pty = pty->Next ) { - if( Pos < 2 ) + if( idx < 2 ) break; - Pos -= 2; + idx -= 2; } RWLock_Release(&glPTY_NamedPTYs); } - if( !pty ) + if( !pty ) { + LOG("%i out of range", Pos); return -1; + } if( pty->Name[0] ) - snprintf(Name, FILENAME_MAX, "%s%c", pty->Name, (Pos == 0 ? 'c' : 's')); + snprintf(Name, FILENAME_MAX, "%s%c", pty->Name, (idx == 0 ? 'c' : 's')); else - snprintf(Name, FILENAME_MAX, "%i%c", pty->NumericName, (Pos == 0 ? 'c' : 's')); + snprintf(Name, FILENAME_MAX, "%i%c", pty->NumericName, (idx == 0 ? 'c' : 's')); + LOG("Return '%s'", Name); return 0; }