Module: wine Branch: refs/heads/master Commit: 71fc596a058082c9480003cfde946d38e6e3f8b9 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=71fc596a058082c9480003cf...
Author: Mike McCormack mike@codeweavers.com Date: Thu Apr 20 00:25:37 2006 +0900
rpcrt4: Make RPCRT4_Send more compatible with write(2).
---
dlls/rpcrt4/rpc_message.c | 26 +++++++++++++++++++------- 1 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/dlls/rpcrt4/rpc_message.c b/dlls/rpcrt4/rpc_message.c index 7fe5e6a..6e89ace 100644 --- a/dlls/rpcrt4/rpc_message.c +++ b/dlls/rpcrt4/rpc_message.c @@ -238,6 +238,15 @@ VOID RPCRT4_FreeHeader(RpcPktHdr *Header HeapFree(GetProcessHeap(), 0, Header); }
+static int rpcrt4_conn_write(RpcConnection *Connection, + const void *buffer, unsigned int count) +{ + DWORD dwWritten = 0; + if (!WriteFile(Connection->conn, buffer, count, &dwWritten, NULL)) + return -1; + return dwWritten; +} + /*********************************************************************** * RPCRT4_Send (internal) * @@ -247,7 +256,8 @@ RPC_STATUS RPCRT4_Send(RpcConnection *Co void *Buffer, unsigned int BufferLength) { PUCHAR buffer_pos; - DWORD hdr_size, count; + DWORD hdr_size; + LONG count;
buffer_pos = Buffer; /* The packet building functions save the packet header size, so we can use it. */ @@ -264,9 +274,10 @@ RPC_STATUS RPCRT4_Send(RpcConnection *Co }
/* transmit packet header */ - if (!WriteFile(Connection->conn, Header, hdr_size, &count, NULL)) { - WARN("WriteFile failed with error %ld\n", GetLastError()); - return GetLastError(); + count = rpcrt4_conn_write(Connection, Header, hdr_size); + if (count<0) { + WARN("rpcrt4_conn_write failed\n"); + return RPC_S_PROTOCOL_ERROR; }
/* fragment consisted of header only and is the last one */ @@ -276,9 +287,10 @@ RPC_STATUS RPCRT4_Send(RpcConnection *Co }
/* send the fragment data */ - if (!WriteFile(Connection->conn, buffer_pos, Header->common.frag_len - hdr_size, &count, NULL)) { - WARN("WriteFile failed with error %ld\n", GetLastError()); - return GetLastError(); + count = rpcrt4_conn_write(Connection, buffer_pos, Header->common.frag_len - hdr_size); + if (count<0) { + WARN("rpcrt4_conn_write failed\n"); + return RPC_S_PROTOCOL_ERROR; }
buffer_pos += Header->common.frag_len - hdr_size;