I did not see a response to my question back then, but a few months this was addressed by the following patch:
commit 95ea3527385aed7d9f0e0dc7fce755407d28acf5 Author: Alexandre Julliard julliard@winehq.org Date: Wed Sep 1 12:39:01 2010 +0200
rpcrt4: Remove a couple of unused local variables.
Theoretically RpcBindingFree in the loop can still return RPC_S_INVALID_BINDING if provided with the NULL pointer, but I guess this won't be the case for any RPC_BINDING_VECTOR** every passed to RpcBindingVectorFree() ?
Gerald
PS: Yes, I'm going through some older submissions of mine. ;-)
On Sun, 9 May 2010, Gerald Pfeifer wrote:
Looking at
RPC_STATUS WINAPI RpcBindingVectorFree( RPC_BINDING_VECTOR** BindingVector ) { RPC_STATUS status; ULONG c;
TRACE("(%p)\n", BindingVector); for (c=0; c<(*BindingVector)->Count; c++) { status = RpcBindingFree(&(*BindingVector)->BindingH[c]); } HeapFree(GetProcessHeap(), 0, *BindingVector); *BindingVector = NULL; return RPC_S_OK;
}
we currently always ignore the outcome of RpcBindingFree and return RPC_S_OK.
However, there is one case where RpcBindingFree returns something different (which is if *Binding is null when RPC_S_INVALID_BINDING is returned).
What is the proper way of handling this? Just keeping the code as is and removing the unused status variable? Breaking the loop once RpcBindingFree returns something different from RPC_S_OK? Continuing and returning the first / the last status different from RPC_S_OK?
Gerald