Error handling in RpcBindingVectorFree (dlls/rpcrt4/rpc_binding.c)

Gerald Pfeifer gerald at pfeifer.com
Sun May 9 07:25:17 CDT 2010


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



More information about the wine-devel mailing list