Commit 7fcae156 authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

Made the calls to (Read|Write)Console through a function pointer to

ease up ntdll/kernel separation.
parent 3d4d7e01
...@@ -364,6 +364,42 @@ static HANDLE FILE_OpenConsole( BOOL output, DWORD access, DWORD sharing, LPSECU ...@@ -364,6 +364,42 @@ static HANDLE FILE_OpenConsole( BOOL output, DWORD access, DWORD sharing, LPSECU
return ret; return ret;
} }
/* FIXME: those routines defined as pointers are needed, because this file is
* currently compiled into NTDLL whereas it belongs to kernel32.
* this shall go away once all the DLL separation process is done
*/
typedef BOOL (WINAPI* pRW)(HANDLE, const void*, DWORD, DWORD*, void*);
static BOOL FILE_ReadConsole(HANDLE hCon, void* buf, DWORD nb, DWORD* nr, void* p)
{
static HANDLE hKernel /* = 0 */;
static pRW pReadConsole /* = 0 */;
if ((!hKernel && !(hKernel = LoadLibraryA("kernel32"))) ||
(!pReadConsole &&
!(pReadConsole = GetProcAddress(hKernel, "ReadConsoleA"))))
{
*nr = 0;
return 0;
}
return (pReadConsole)(hCon, buf, nb, nr, p);
}
static BOOL FILE_WriteConsole(HANDLE hCon, const void* buf, DWORD nb, DWORD* nr, void* p)
{
static HANDLE hKernel /* = 0 */;
static pRW pWriteConsole /* = 0 */;
if ((!hKernel && !(hKernel = LoadLibraryA("kernel32"))) ||
(!pWriteConsole &&
!(pWriteConsole = GetProcAddress(hKernel, "WriteConsoleA"))))
{
*nr = 0;
return 0;
}
return (pWriteConsole)(hCon, buf, nb, nr, p);
}
/* end of FIXME */
/*********************************************************************** /***********************************************************************
* FILE_CreateFile * FILE_CreateFile
...@@ -1640,7 +1676,7 @@ BOOL WINAPI ReadFile( HANDLE hFile, LPVOID buffer, DWORD bytesToRead, ...@@ -1640,7 +1676,7 @@ BOOL WINAPI ReadFile( HANDLE hFile, LPVOID buffer, DWORD bytesToRead,
case FD_TYPE_SMB: case FD_TYPE_SMB:
return SMB_ReadFile(hFile, buffer, bytesToRead, bytesRead, NULL); return SMB_ReadFile(hFile, buffer, bytesToRead, bytesRead, NULL);
case FD_TYPE_CONSOLE: case FD_TYPE_CONSOLE:
return ReadConsoleA(hFile, buffer, bytesToRead, bytesRead, NULL); return FILE_ReadConsole(hFile, buffer, bytesToRead, bytesRead, NULL);
default: default:
/* normal unix files */ /* normal unix files */
...@@ -1840,7 +1876,7 @@ BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID buffer, DWORD bytesToWrite, ...@@ -1840,7 +1876,7 @@ BOOL WINAPI WriteFile( HANDLE hFile, LPCVOID buffer, DWORD bytesToWrite,
case FD_TYPE_CONSOLE: case FD_TYPE_CONSOLE:
TRACE("%d %s %ld %p %p\n", hFile, debugstr_an(buffer, bytesToWrite), bytesToWrite, TRACE("%d %s %ld %p %p\n", hFile, debugstr_an(buffer, bytesToWrite), bytesToWrite,
bytesWritten, overlapped ); bytesWritten, overlapped );
return WriteConsoleA(hFile, buffer, bytesToWrite, bytesWritten, NULL); return FILE_WriteConsole(hFile, buffer, bytesToWrite, bytesWritten, NULL);
default: default:
if (unix_handle == -1) if (unix_handle == -1)
return FALSE; return FALSE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment