KERNEL32: implement CallNamedPipe
Mike McCormack
mike at codeweavers.com
Tue Aug 31 07:19:02 CDT 2004
ChangeLog:
* implement CallNamedPipe
-------------- next part --------------
Index: dlls/kernel/sync.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/sync.c,v
retrieving revision 1.59
diff -u -r1.59 sync.c
--- dlls/kernel/sync.c 18 Aug 2004 00:04:58 -0000 1.59
+++ dlls/kernel/sync.c 31 Aug 2004 06:30:33 -0000
@@ -1392,28 +1392,61 @@
* CallNamedPipeA (KERNEL32.@)
*/
BOOL WINAPI CallNamedPipeA(
- LPCSTR lpNamedPipeName, LPVOID lpInput, DWORD lpInputSize,
- LPVOID lpOutput, DWORD lpOutputSize,
+ LPCSTR lpNamedPipeName, LPVOID lpInput, DWORD dwInputSize,
+ LPVOID lpOutput, DWORD dwOutputSize,
LPDWORD lpBytesRead, DWORD nTimeout)
{
- FIXME("%s %p %ld %p %ld %p %ld\n",
- debugstr_a(lpNamedPipeName), lpInput, lpInputSize,
- lpOutput, lpOutputSize, lpBytesRead, nTimeout);
- return FALSE;
+ DWORD len;
+ LPWSTR str = NULL;
+ BOOL ret;
+
+ TRACE("%s %p %ld %p %ld %p %ld\n",
+ debugstr_a(lpNamedPipeName), lpInput, dwInputSize,
+ lpOutput, dwOutputSize, lpBytesRead, nTimeout);
+
+ if( lpNamedPipeName )
+ {
+ len = MultiByteToWideChar( CP_ACP, 0, lpNamedPipeName, -1, NULL, 0 );
+ str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
+ MultiByteToWideChar( CP_ACP, 0, lpNamedPipeName, -1, str, len );
+ }
+ ret = CallNamedPipeW( str, lpInput, dwInputSize, lpOutput,
+ dwOutputSize, lpBytesRead, nTimeout );
+ if( lpNamedPipeName )
+ HeapFree( GetProcessHeap(), 0, str );
+
+ return ret;
}
/***********************************************************************
* CallNamedPipeW (KERNEL32.@)
*/
BOOL WINAPI CallNamedPipeW(
- LPCWSTR lpNamedPipeName, LPVOID lpInput, DWORD lpInputSize,
- LPVOID lpOutput, DWORD lpOutputSize,
+ LPCWSTR lpNamedPipeName, LPVOID lpInput, DWORD dwInputSize,
+ LPVOID lpOutput, DWORD dwOutputSize,
LPDWORD lpBytesRead, DWORD nTimeout)
{
- FIXME("%s %p %ld %p %ld %p %ld\n",
- debugstr_w(lpNamedPipeName), lpInput, lpInputSize,
- lpOutput, lpOutputSize, lpBytesRead, nTimeout);
- return FALSE;
+ HANDLE handle;
+ DWORD count;
+ BOOL r;
+
+ TRACE("%s %p %ld %p %ld %p %ld\n",
+ debugstr_w(lpNamedPipeName), lpInput, dwInputSize,
+ lpOutput, dwOutputSize, lpBytesRead, nTimeout);
+
+ r = WaitNamedPipeW( lpNamedPipeName, nTimeout );
+ if( !r )
+ return r;
+ handle = CreateFileW( lpNamedPipeName, GENERIC_READ|GENERIC_WRITE,
+ 0, NULL, OPEN_EXISTING, 0, NULL );
+ if( !handle )
+ return FALSE;
+ r = WriteFile( handle, lpOutput, dwOutputSize, &count, NULL );
+ if( r )
+ r = ReadFile( handle, lpInput, dwInputSize, lpBytesRead, NULL );
+ CloseHandle( handle );
+
+ return r;
}
/******************************************************************
More information about the wine-patches
mailing list