Module: wine Branch: master Commit: d37bfe960f6fb554f0d4e24052d6b802ba745f1a URL: http://source.winehq.org/git/wine.git/?a=commit;h=d37bfe960f6fb554f0d4e24052...
Author: Zebediah Figura z.figura12@gmail.com Date: Sun May 21 08:53:51 2017 -0500
kernel32: Implement bytes left in PeekNamedPipe().
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/sync.c | 2 +- server/named_pipe.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/sync.c b/dlls/kernel32/sync.c index ee995f5..d3d46b7 100644 --- a/dlls/kernel32/sync.c +++ b/dlls/kernel32/sync.c @@ -1475,7 +1475,7 @@ BOOL WINAPI PeekNamedPipe( HANDLE hPipe, LPVOID lpvBuffer, DWORD cbBuffer, ULONG read_size = io.Information - FIELD_OFFSET( FILE_PIPE_PEEK_BUFFER, Data ); if (lpcbAvail) *lpcbAvail = buffer->ReadDataAvailable; if (lpcbRead) *lpcbRead = read_size; - if (lpcbMessage) *lpcbMessage = 0; /* FIXME */ + if (lpcbMessage) *lpcbMessage = buffer->MessageLength - read_size; if (lpvBuffer) memcpy( lpvBuffer, buffer->Data, read_size ); } else SetLastError( RtlNtStatusToDosError(status) ); diff --git a/server/named_pipe.c b/server/named_pipe.c index b8ea426..0c314bd 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c @@ -927,6 +927,7 @@ static void pipe_end_peek( struct pipe_end *pipe_end ) FILE_PIPE_PEEK_BUFFER *buffer; struct pipe_message *message; data_size_t avail = 0; + data_size_t message_length = 0;
if (!use_server_io( pipe_end )) { @@ -947,7 +948,8 @@ static void pipe_end_peek( struct pipe_end *pipe_end ) if (avail) { message = LIST_ENTRY( list_head(&pipe_end->message_queue), struct pipe_message, entry ); - reply_size = min( reply_size, message->iosb->in_size - message->read_pos ); + message_length = message->iosb->in_size - message->read_pos; + reply_size = min( reply_size, message_length ); } else reply_size = 0;
@@ -955,7 +957,7 @@ static void pipe_end_peek( struct pipe_end *pipe_end ) buffer->NamedPipeState = 0; /* FIXME */ buffer->ReadDataAvailable = avail; buffer->NumberOfMessages = 0; /* FIXME */ - buffer->MessageLength = 0; /* FIXME */ + buffer->MessageLength = message_length; if (reply_size) memcpy( buffer->Data, (const char *)message->iosb->in_data + message->read_pos, reply_size ); }