Robert Shearman : rpcrt4: Fix NdrFullPointerQueryRefId to make more tests pass.

Alexandre Julliard julliard at wine.codeweavers.com
Sat May 27 06:34:02 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 7af506b2b48e5f3b28f09b4ad730fd8da6cb5038
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=7af506b2b48e5f3b28f09b4ad730fd8da6cb5038

Author: Robert Shearman <rob at codeweavers.com>
Date:   Fri May 26 19:56:23 2006 +0100

rpcrt4: Fix NdrFullPointerQueryRefId to make more tests pass.

---

 dlls/rpcrt4/ndr_fullpointer.c    |    9 +++++++++
 dlls/rpcrt4/tests/ndr_marshall.c |   12 +++---------
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/dlls/rpcrt4/ndr_fullpointer.c b/dlls/rpcrt4/ndr_fullpointer.c
index 8b2e6dd..983bd51 100644
--- a/dlls/rpcrt4/ndr_fullpointer.c
+++ b/dlls/rpcrt4/ndr_fullpointer.c
@@ -145,8 +145,17 @@ int WINAPI NdrFullPointerQueryRefId(PFUL
 
     expand_pointer_table_if_necessary(pXlatTables, RefId);
 
+    pXlatTables->NextRefId = max(RefId + 1, pXlatTables->NextRefId);
+
     if (pXlatTables->RefIdToPointer.NumberOfEntries > RefId)
+    {
         *ppPointer = pXlatTables->RefIdToPointer.XlatTable[RefId];
+        if (QueryType)
+            return pXlatTables->RefIdToPointer.StateTable[RefId];
+        else
+            return 0;
+    }
+    *ppPointer = NULL;
     return 0;
 }
 
diff --git a/dlls/rpcrt4/tests/ndr_marshall.c b/dlls/rpcrt4/tests/ndr_marshall.c
index e39decb..f9cf602 100644
--- a/dlls/rpcrt4/tests/ndr_marshall.c
+++ b/dlls/rpcrt4/tests/ndr_marshall.c
@@ -762,21 +762,17 @@ static void test_fullpointer_xlat(void)
 
     ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 1, &RefId);
     ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret);
-    todo_wine {
-    ok(RefId == 0x3, "RefId should be 0x1 instead of 0x%lx\n", RefId);
-    }
+    ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%lx\n", RefId);
 
     ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 1, &RefId);
     ok(ret == 1, "ret should be 1 instead of 0x%x\n", ret);
-    todo_wine {
-    ok(RefId == 0x3, "RefId should be 0x1 instead of 0x%lx\n", RefId);
-    }
+    ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%lx\n", RefId);
 
     ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebeef, 0, &RefId);
     todo_wine {
     ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret);
-    ok(RefId == 0x3, "RefId should be 0x1 instead of 0x%lx\n", RefId);
     }
+    ok(RefId == 0x3, "RefId should be 0x3 instead of 0x%lx\n", RefId);
 
     ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xcafebabe, 0, &RefId);
     ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret);
@@ -784,9 +780,7 @@ static void test_fullpointer_xlat(void)
 
     ret = NdrFullPointerQueryPointer(pXlatTables, (void *)0xdeadbeef, 0, &RefId);
     ok(ret == 0, "ret should be 0 instead of 0x%x\n", ret);
-    todo_wine {
     ok(RefId == 0x4, "RefId should be 0x4 instead of 0x%lx\n", RefId);
-    }
 
     /* "freeing" phase */
 




More information about the wine-cvs mailing list