mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 08:54:40 +00:00
Patched up console code a bit
svn path=/trunk/; revision=1126
This commit is contained in:
parent
66780d1d02
commit
6ac6c50282
|
@ -60,7 +60,7 @@ HANDLE STDCALL GetStdHandle(DWORD nStdHandle)
|
||||||
case STD_OUTPUT_HANDLE: return Ppb->OutputHandle;
|
case STD_OUTPUT_HANDLE: return Ppb->OutputHandle;
|
||||||
case STD_ERROR_HANDLE: return Ppb->ErrorHandle;
|
case STD_ERROR_HANDLE: return Ppb->ErrorHandle;
|
||||||
}
|
}
|
||||||
SetLastError(0); /* FIXME: What error code? */
|
SetLastError( ERROR_INVALID_PARAMETER );
|
||||||
return INVALID_HANDLE_VALUE;
|
return INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ WINBASEAPI BOOL WINAPI SetStdHandle(DWORD nStdHandle,
|
||||||
/* More checking needed? */
|
/* More checking needed? */
|
||||||
if (hHandle == INVALID_HANDLE_VALUE)
|
if (hHandle == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
SetLastError(0); /* FIXME: What error code? */
|
SetLastError( ERROR_INVALID_HANDLE );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ WINBASEAPI BOOL WINAPI SetStdHandle(DWORD nStdHandle,
|
||||||
Ppb->ErrorHandle = hHandle;
|
Ppb->ErrorHandle = hHandle;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
SetLastError(0); /* FIXME: What error code? */
|
SetLastError( ERROR_INVALID_PARAMETER );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,11 +186,31 @@ WINBOOL STDCALL ReadConsoleA(HANDLE hConsoleInput,
|
||||||
sizeof(CSRSS_API_REQUEST),
|
sizeof(CSRSS_API_REQUEST),
|
||||||
sizeof(CSRSS_API_REPLY) +
|
sizeof(CSRSS_API_REPLY) +
|
||||||
nNumberOfCharsToRead);
|
nNumberOfCharsToRead);
|
||||||
|
// DbgPrint( "Csrss Returned\n" );
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Reply->Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Reply->Status))
|
||||||
{
|
{
|
||||||
|
DbgPrint( "CSR returned error in ReadConsole\n" );
|
||||||
|
HeapFree( GetProcessHeap(), 0, Reply );
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
if( Reply->Status == STATUS_PENDING )
|
||||||
|
{
|
||||||
|
//DbgPrint( "Read pending, waiting on object %x\n", Reply->Data.ReadConsoleReply.EventHandle );
|
||||||
|
Status = NtWaitForSingleObject( Reply->Data.ReadConsoleReply.EventHandle, FALSE, 0 );
|
||||||
|
if( !NT_SUCCESS( Status ) )
|
||||||
|
{
|
||||||
|
DbgPrint( "Wait for console input failed!\n" );
|
||||||
|
HeapFree( GetProcessHeap(), 0, Reply );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
Status = CsrClientCallServer( &Request, Reply, sizeof( CSRSS_API_REQUEST ), sizeof( CSRSS_API_REPLY ) + nNumberOfCharsToRead );
|
||||||
|
if( !NT_SUCCESS( Status ) || !NT_SUCCESS( Reply->Status ) )
|
||||||
|
{
|
||||||
|
SetLastError( RtlNtStatusToDosError( Reply->Status ) );
|
||||||
|
HeapFree( GetProcessHeap(), 0, Reply );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (lpNumberOfCharsRead != NULL)
|
if (lpNumberOfCharsRead != NULL)
|
||||||
{
|
{
|
||||||
*lpNumberOfCharsRead =
|
*lpNumberOfCharsRead =
|
||||||
|
@ -199,7 +219,6 @@ WINBOOL STDCALL ReadConsoleA(HANDLE hConsoleInput,
|
||||||
memcpy(lpBuffer,
|
memcpy(lpBuffer,
|
||||||
Reply->Data.ReadConsoleReply.Buffer,
|
Reply->Data.ReadConsoleReply.Buffer,
|
||||||
Reply->Data.ReadConsoleReply.NrCharactersRead);
|
Reply->Data.ReadConsoleReply.NrCharactersRead);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),
|
HeapFree(GetProcessHeap(),
|
||||||
0,
|
0,
|
||||||
Reply);
|
Reply);
|
||||||
|
@ -213,7 +232,18 @@ WINBOOL STDCALL ReadConsoleA(HANDLE hConsoleInput,
|
||||||
*/
|
*/
|
||||||
WINBOOL STDCALL AllocConsole(VOID)
|
WINBOOL STDCALL AllocConsole(VOID)
|
||||||
{
|
{
|
||||||
DbgPrint("AllocConsole() is unimplemented\n");
|
CSRSS_API_REQUEST Request;
|
||||||
|
CSRSS_API_REPLY Reply;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
Request.Type = CSRSS_ALLOC_CONSOLE;
|
||||||
|
Status = CsrClientCallServer( &Request, &Reply, sizeof( CSRSS_API_REQUEST ), sizeof( CSRSS_API_REPLY ) );
|
||||||
|
if( !NT_SUCCESS( Status ) || !NT_SUCCESS( Reply.Status ) )
|
||||||
|
DbgPrint( "AllocConsole Failed\n" );
|
||||||
|
SetStdHandle( STD_INPUT_HANDLE, Reply.Data.AllocConsoleReply.ConsoleHandle );
|
||||||
|
SetStdHandle( STD_OUTPUT_HANDLE, Reply.Data.AllocConsoleReply.ConsoleHandle );
|
||||||
|
SetStdHandle( STD_ERROR_HANDLE, Reply.Data.AllocConsoleReply.ConsoleHandle );
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue