Rob Shearman : oleaut32: SafeArrayAllocData should succeed when cbElements is 0.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Dec 28 07:40:19 CST 2006


Module: wine
Branch: master
Commit: 72a84fbf06a350c3f1fd0a5b45ab26288f447da2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=72a84fbf06a350c3f1fd0a5b45ab26288f447da2

Author: Rob Shearman <rob at codeweavers.com>
Date:   Wed Dec 27 19:14:38 2006 +0000

oleaut32: SafeArrayAllocData should succeed when cbElements is 0.

---

 dlls/oleaut32/safearray.c       |   19 ++++++++-----------
 dlls/oleaut32/tests/safearray.c |    5 +----
 2 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/dlls/oleaut32/safearray.c b/dlls/oleaut32/safearray.c
index 93656f2..d0ca263 100644
--- a/dlls/oleaut32/safearray.c
+++ b/dlls/oleaut32/safearray.c
@@ -228,7 +228,7 @@ static SAFEARRAY* SAFEARRAY_Create(VARTY
     if (ulSize)
       psa->cbElements = ulSize;
 
-    if (FAILED(SafeArrayAllocData(psa)))
+    if (!psa->cbElements || FAILED(SafeArrayAllocData(psa)))
     {
       SafeArrayDestroyDescriptor(psa);
       psa = NULL;
@@ -533,19 +533,16 @@ HRESULT WINAPI SafeArrayAllocData(SAFEAR
   {
     ULONG ulSize = SAFEARRAY_GetCellCount(psa);
 
-    hRet = E_OUTOFMEMORY;
+    psa->pvData = SAFEARRAY_Malloc(ulSize * psa->cbElements);
 
-    if (psa->cbElements)
+    if (psa->pvData)
     {
-      psa->pvData = SAFEARRAY_Malloc(ulSize * psa->cbElements);
-
-      if (psa->pvData)
-      {
-        hRet = S_OK;
-        TRACE("%u bytes allocated for data at %p (%u objects).\n",
-              ulSize * psa->cbElements, psa->pvData, ulSize);
-      }
+      hRet = S_OK;
+      TRACE("%u bytes allocated for data at %p (%u objects).\n",
+            ulSize * psa->cbElements, psa->pvData, ulSize);
     }
+    else
+      hRet = E_OUTOFMEMORY;
   }
   return hRet;
 }
diff --git a/dlls/oleaut32/tests/safearray.c b/dlls/oleaut32/tests/safearray.c
index 41ee3cb..b80c733 100644
--- a/dlls/oleaut32/tests/safearray.c
+++ b/dlls/oleaut32/tests/safearray.c
@@ -690,10 +690,7 @@ static void test_SafeArrayAllocDestroyDe
   sa->rgsabound[0].lLbound = 1;
 
   hres = SafeArrayAllocData(sa);
-  todo_wine
-  {
-      ok(hres == S_OK, "SafeArrayAllocData gave hres 0x%x\n", hres);
-  }
+  ok(hres == S_OK, "SafeArrayAllocData gave hres 0x%x\n", hres);
 }
 
 static void test_SafeArrayCreateLockDestroy(void)




More information about the wine-cvs mailing list