.Name = "pts",
.RootNode = {
.Flags = VFS_FFLAG_DIRECTORY,
- .Type = &gPTY_NodeType_Root
+ .Type = &gPTY_NodeType_Root,
+ .Size = -1
}
};
int giPTY_NumCount;
errno = EINVAL;
return -1;
}
- PTY->Mode = *Mode;
- if( !WasClient )
+ if( WasClient )
{
if( PTY->ModeSet && PTY->ModeSet(PTY->OutputHandle, Mode) )
{
// ACK by server doing GETMODE
}
}
+ else
+ {
+ // Should the client be informed that the server just twiddled the modes?
+ }
+ LOG("PTY %p mode set to {0%o, 0%o}", PTY, Mode->InputMode, Mode->OutputMode);
+ PTY->Mode = *Mode;
}
if( Dims )
{
- if( WasClient ) {
+ if( WasClient )
+ {
// Poke the server?
if( PTY->ReqResize && PTY->ReqResize(PTY->OutputHandle, Dims) )
{
// Inform server process... somehow
}
}
- else {
+ else
+ {
// SIGWINSZ to client
}
+ LOG("PTY %p dims set to %ix%i", PTY, Dims->W, Dims->H);
PTY->Dims = *Dims;
}
return 0;
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;
}
}
RWLock_Release(&glPTY_NamedPTYs);
}
- if( ret )
- return (isServer ? &ret->ServerNode : &ret->ClientNode);
+ if( ret ) {
+ tVFS_Node *retnode = (isServer ? &ret->ServerNode : &ret->ClientNode);
+ retnode->ReferenceCount ++;
+ return retnode;
+ }
else
return NULL;
}