Module: wine Branch: master Commit: 5267e36ad0abf1d5eb12d2a83ea4ec6af97b7b61 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5267e36ad0abf1d5eb12d2a83e...
Author: Rob Shearman rob@codeweavers.com Date: Mon Mar 5 12:06:02 2007 +0000
kernel32: Implement CallNamedPipeW.
---
dlls/kernel32/sync.c | 37 +++++++++++++++++++++++++++++++++---- 1 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c index eaa0f70..d3f2f4b 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -1515,10 +1515,39 @@ BOOL WINAPI CallNamedPipeW( LPVOID lpOutput, DWORD lpOutputSize, LPDWORD lpBytesRead, DWORD nTimeout) { - FIXME("%s %p %d %p %d %p %d\n", - debugstr_w(lpNamedPipeName), lpInput, lpInputSize, - lpOutput, lpOutputSize, lpBytesRead, nTimeout); - return FALSE; + HANDLE pipe; + BOOL ret; + DWORD mode; + + TRACE("%s %p %d %p %d %p %d\n", + debugstr_w(lpNamedPipeName), lpInput, lpInputSize, + lpOutput, lpOutputSize, lpBytesRead, nTimeout); + + pipe = CreateFileW(lpNamedPipeName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (pipe == INVALID_HANDLE_VALUE) + { + ret = WaitNamedPipeW(lpNamedPipeName, nTimeout); + if (!ret) + return FALSE; + pipe = CreateFileW(lpNamedPipeName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (pipe == INVALID_HANDLE_VALUE) + return FALSE; + } + + mode = PIPE_READMODE_MESSAGE; + ret = SetNamedPipeHandleState(pipe, &mode, NULL, NULL); + if (!ret) + { + CloseHandle(pipe); + return FALSE; + } + + ret = TransactNamedPipe(pipe, lpInput, lpInputSize, lpOutput, lpOutputSize, lpBytesRead, NULL); + CloseHandle(pipe); + if (!ret) + return FALSE; + + return TRUE; }
/******************************************************************