rpcrt4: Convert the protseq list into a standard Wine list.

Robert Shearman rob at codeweavers.com
Mon Oct 16 10:49:29 CDT 2006


---
  dlls/rpcrt4/rpc_server.c |   33 +++++++++++++--------------------
  dlls/rpcrt4/rpc_server.h |    3 ++-
  2 files changed, 15 insertions(+), 21 deletions(-)
-------------- next part --------------
diff --git a/dlls/rpcrt4/rpc_server.c b/dlls/rpcrt4/rpc_server.c
index 7faac56..065ac89 100644
--- a/dlls/rpcrt4/rpc_server.c
+++ b/dlls/rpcrt4/rpc_server.c
@@ -66,7 +66,8 @@ typedef struct _RpcObjTypeMap
 
 static RpcObjTypeMap *RpcObjTypeMaps;
 
-static RpcServerProtseq* protseqs;
+/* list of type RpcServerProtseq */
+static struct list protseqs = LIST_INIT(protseqs);
 static RpcServerInterface* ifs;
 
 static CRITICAL_SECTION server_cs;
@@ -599,16 +600,15 @@ static RPC_STATUS RPCRT4_start_listen(BO
 
   if (std_listen)
   {
-    cps = protseqs;
-    while (cps && status == RPC_S_OK)
+    LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
     {
       status = RPCRT4_start_listen_protseq(cps, TRUE);
+      if (status != RPC_S_OK)
+        break;
       
       /* make sure server is actually listening on the interface before
-      * returning */
-      if (status == RPC_S_OK)
-        RPCRT4_sync_with_server_thread(cps);
-      cps = cps->Next;
+       * returning */
+      RPCRT4_sync_with_server_thread(cps);
     }
   }
 
@@ -626,11 +626,9 @@ static void RPCRT4_stop_listen(BOOL auto
       std_listen = FALSE;
       LeaveCriticalSection(&listen_cs);
 
-      cps = protseqs;
-      while (cps) {
+      LIST_FOR_EACH_ENTRY(cps, &protseqs, RpcServerProtseq, entry)
         RPCRT4_sync_with_server_thread(cps);
-        cps = cps->Next;
-      }
+
       return;
     }
     assert(listen_count >= 0);
@@ -648,8 +646,7 @@ static RPC_STATUS RPCRT4_use_protseq(Rpc
     return status;
 
   EnterCriticalSection(&server_cs);
-  ps->Next = protseqs;
-  protseqs = ps;
+  list_add_head(&protseqs, &ps->entry);
   LeaveCriticalSection(&server_cs);
 
   if (std_listen)
@@ -680,14 +677,12 @@ RPC_STATUS WINAPI RpcServerInqBindings( 
   EnterCriticalSection(&server_cs);
   /* count connections */
   count = 0;
-  ps = protseqs;
-  while (ps) {
+  LIST_FOR_EACH_ENTRY(ps, &protseqs, RpcServerProtseq, entry) {
     conn = ps->conn;
     while (conn) {
       count++;
       conn = conn->Next;
     }
-    ps = ps->Next;
   }
   if (count) {
     /* export bindings */
@@ -696,8 +691,7 @@ RPC_STATUS WINAPI RpcServerInqBindings( 
                               sizeof(RPC_BINDING_HANDLE)*(count-1));
     (*BindingVector)->Count = count;
     count = 0;
-    ps = protseqs;
-    while (ps) {
+    LIST_FOR_EACH_ENTRY(ps, &protseqs, RpcServerProtseq, entry) {
       conn = ps->conn;
       while (conn) {
        RPCRT4_MakeBinding((RpcBinding**)&(*BindingVector)->BindingH[count],
@@ -705,7 +699,6 @@ RPC_STATUS WINAPI RpcServerInqBindings( 
        count++;
        conn = conn->Next;
       }
-      ps = ps->Next;
     }
     status = RPC_S_OK;
   } else {
@@ -1022,7 +1015,7 @@ RPC_STATUS WINAPI RpcServerListen( UINT 
 
   TRACE("(%u,%u,%u)\n", MinimumCallThreads, MaxCalls, DontWait);
 
-  if (!protseqs)
+  if (list_empty(&protseqs))
     return RPC_S_NO_PROTSEQS_REGISTERED;
 
   status = RPCRT4_start_listen(FALSE);
diff --git a/dlls/rpcrt4/rpc_server.h b/dlls/rpcrt4/rpc_server.h
index 9452ace..b2ad8f8 100644
--- a/dlls/rpcrt4/rpc_server.h
+++ b/dlls/rpcrt4/rpc_server.h
@@ -22,13 +22,14 @@ #ifndef __WINE_RPC_SERVER_H
 #define __WINE_RPC_SERVER_H
 
 #include "rpc_binding.h"
+#include "wine/list.h"
 
 struct protseq_ops;
 
 typedef struct _RpcServerProtseq
 {
   const struct protseq_ops *ops;
-  struct _RpcServerProtseq* Next;
+  struct list entry;
   LPSTR Protseq;
   LPSTR Endpoint;
   UINT MaxCalls;


More information about the wine-patches mailing list