netapi32: NetApiBufferReallocate fixes & tests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On November 26, 2003 07:40 pm, Juan Lang wrote:
> NetApiBufferReallocate:
> - does not allocate memory when NULL is the original
> pointer passed in
> - frees memory when the new size is 0

Thanks Juan,
Here's the resulting patch.

ChangeLog
    Fix NetApiBufferReallocate and add a few tests for the border
    cases (thanks to Juan Lang for clarifications).

Index: dlls/netapi32/apibuf.c
===================================================================
RCS file: /var/cvs/wine/dlls/netapi32/apibuf.c,v
retrieving revision 1.3
diff -u -r1.3 apibuf.c
--- dlls/netapi32/apibuf.c	5 Sep 2003 23:08:35 -0000	1.3
+++ dlls/netapi32/apibuf.c	3 Dec 2003 16:41:24 -0000
@@ -60,11 +60,17 @@
                                              LPVOID* NewBuffer)
 {
     TRACE("(%p, %ld, %p)\n", OldBuffer, NewByteCount, NewBuffer);
-    *NewBuffer = HeapReAlloc(GetProcessHeap(), 0, OldBuffer, NewByteCount);
-    if (*NewBuffer)
-        return NERR_Success;
-    else
-        return GetLastError();
+    if (NewByteCount) 
+    {
+	*NewBuffer = HeapReAlloc(GetProcessHeap(), 0, OldBuffer, NewByteCount);
+	return *NewBuffer ? NERR_Success : GetLastError();
+    } 
+    else 
+    {
+	if (!HeapFree(GetProcessHeap(), 0, OldBuffer)) return GetLastError();
+	*NewBuffer = 0;
+	return NERR_Success;
+    }
 }
 
 /************************************************************
Index: dlls/netapi32/tests/apibuf.c
===================================================================
RCS file: /var/cvs/wine/dlls/netapi32/tests/apibuf.c,v
retrieving revision 1.3
diff -u -r1.3 apibuf.c
--- dlls/netapi32/tests/apibuf.c	5 Sep 2003 23:08:35 -0000	1.3
+++ dlls/netapi32/tests/apibuf.c	3 Dec 2003 16:38:01 -0000
@@ -63,7 +63,14 @@
     ok(dwSize >= 0, "The size");
     ok(pNetApiBufferSize(NULL, &dwSize) == ERROR_INVALID_PARAMETER, "Error for NULL pointer");
 
-   /* 0-length buffer */
+    /* border reallocate cases */
+    ok(pNetApiBufferReallocate(0, 1500, (LPVOID *) &p) != NERR_Success, "(Re)allocated");
+    ok(p == NULL, "Some memory got allocated");
+    ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success, "Memory not reserved");
+    ok(pNetApiBufferReallocate(p, 0, (LPVOID *) &p) == NERR_Success, "Not freed");
+    ok(p == NULL, "Pointer not cleared");
+    
+    /* 0-length buffer */
     ok(pNetApiBufferAllocate(0, (LPVOID *)&p) == NERR_Success,
        "Reserved memory");
     ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size");


-- 
Dimi.



[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux