Module: wine Branch: master Commit: ec2f51369092c5bce9093a0f8dc342d4889896f4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ec2f51369092c5bce9093a0f8d...
Author: Damjan Jovanovic damjan.jov@gmail.com Date: Thu Jun 23 07:15:40 2011 +0200
rpcrt4: Implement RpcNetworkInqProtseqs.
---
dlls/rpcrt4/rpc_server.c | 18 ------------ dlls/rpcrt4/rpc_transport.c | 65 +++++++++++++++++++++++++++++++++++++++++++ include/rpcdce.h | 6 ++++ 3 files changed, 71 insertions(+), 18 deletions(-)
diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c index 3a9ecf8..9fd4cf6 100644 --- a/dlls/rpcrt4/rpc_server.c +++ b/dlls/rpcrt4/rpc_server.c @@ -825,24 +825,6 @@ static RPC_STATUS RPCRT4_use_protseq(RpcServerProtseq* ps, const char *endpoint) }
/*********************************************************************** - * RpcNetworkInqProtseqsA (RPCRT4.@) - */ -RPC_STATUS WINAPI RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA* ProtSeqVector ) -{ - FIXME("(%p): stub\n", ProtSeqVector); - return RPC_S_NO_PROTSEQS_REGISTERED; -} - -/*********************************************************************** - * RpcNetworkInqProtseqsW (RPCRT4.@) - */ -RPC_STATUS WINAPI RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW* ProtSeqVector ) -{ - FIXME("(%p): stub\n", ProtSeqVector); - return RPC_S_NO_PROTSEQS_REGISTERED; -} - -/*********************************************************************** * RpcServerInqBindings (RPCRT4.@) */ RPC_STATUS WINAPI RpcServerInqBindings( RPC_BINDING_VECTOR** BindingVector ) diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c index 0ba9720..467c305 100644 --- a/dlls/rpcrt4/rpc_transport.c +++ b/dlls/rpcrt4/rpc_transport.c @@ -3160,3 +3160,68 @@ RPC_STATUS WINAPI RpcProtseqVectorFreeW(RPC_PROTSEQ_VECTORW **protseqs) } return RPC_S_OK; } + +/*********************************************************************** + * RpcNetworkInqProtseqsW (RPCRT4.@) + */ +RPC_STATUS WINAPI RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs ) +{ + RPC_PROTSEQ_VECTORW *pvector; + int i = 0; + RPC_STATUS status = RPC_S_OUT_OF_MEMORY; + + TRACE("(%p)\n", protseqs); + + *protseqs = HeapAlloc(GetProcessHeap(), 0, sizeof(RPC_PROTSEQ_VECTORW)+(sizeof(unsigned short*)*ARRAYSIZE(protseq_list))); + if (!*protseqs) + goto end; + pvector = *protseqs; + pvector->Count = 0; + for (i = 0; i < ARRAYSIZE(protseq_list); i++) + { + pvector->Protseq[i] = HeapAlloc(GetProcessHeap(), 0, (strlen(protseq_list[i].name)+1)*sizeof(unsigned short)); + if (pvector->Protseq[i] == NULL) + goto end; + MultiByteToWideChar(CP_ACP, 0, (CHAR*)protseq_list[i].name, -1, + (WCHAR*)pvector->Protseq[i], strlen(protseq_list[i].name) + 1); + pvector->Count++; + } + status = RPC_S_OK; + +end: + if (status != RPC_S_OK) + RpcProtseqVectorFreeW(protseqs); + return status; +} + +/*********************************************************************** + * RpcNetworkInqProtseqsA (RPCRT4.@) + */ +RPC_STATUS WINAPI RpcNetworkInqProtseqsA(RPC_PROTSEQ_VECTORA** protseqs) +{ + RPC_PROTSEQ_VECTORA *pvector; + int i = 0; + RPC_STATUS status = RPC_S_OUT_OF_MEMORY; + + TRACE("(%p)\n", protseqs); + + *protseqs = HeapAlloc(GetProcessHeap(), 0, sizeof(RPC_PROTSEQ_VECTORW)+(sizeof(unsigned char*)*ARRAYSIZE(protseq_list))); + if (!*protseqs) + goto end; + pvector = *protseqs; + pvector->Count = 0; + for (i = 0; i < ARRAYSIZE(protseq_list); i++) + { + pvector->Protseq[i] = HeapAlloc(GetProcessHeap(), 0, strlen(protseq_list[i].name)+1); + if (pvector->Protseq[i] == NULL) + goto end; + strcpy((char*)pvector->Protseq[i], protseq_list[i].name); + pvector->Count++; + } + status = RPC_S_OK; + +end: + if (status != RPC_S_OK) + RpcProtseqVectorFreeA(protseqs); + return status; +} diff --git a/include/rpcdce.h b/include/rpcdce.h index 76994df..bbdc42f 100644 --- a/include/rpcdce.h +++ b/include/rpcdce.h @@ -562,6 +562,12 @@ RPCRTAPI RPC_STATUS RPC_ENTRY #define RpcNetworkIsProtseqValid WINELIB_NAME_AW(RpcNetworkIsProtseqValid)
RPCRTAPI RPC_STATUS RPC_ENTRY + RpcNetworkInqProtseqsA( RPC_PROTSEQ_VECTORA** protseqs ); +RPCRTAPI RPC_STATUS RPC_ENTRY + RpcNetworkInqProtseqsW( RPC_PROTSEQ_VECTORW** protseqs ); +#define RpcNetworkInqProtseqs WINELIB_NAME_AW(RpcNetworkInqProtseqs) + +RPCRTAPI RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeA( RPC_PROTSEQ_VECTORA** protseqs ); RPCRTAPI RPC_STATUS RPC_ENTRY RpcProtseqVectorFreeW( RPC_PROTSEQ_VECTORW** protseqs );