Rémi Bernon : kernel32: Cleanup and simplify (Global|Local)Size.

Alexandre Julliard julliard at winehq.org
Fri Jun 10 16:28:26 CDT 2022


Module: wine
Branch: master
Commit: 866d7d0c073b1ef4abaf6f6f6237c98654479adc
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=866d7d0c073b1ef4abaf6f6f6237c98654479adc

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Mon May 30 23:33:41 2022 +0200

kernel32: Cleanup and simplify (Global|Local)Size.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>

---

 dlls/kernel32/heap.c | 88 ++++++++++++++++------------------------------------
 1 file changed, 27 insertions(+), 61 deletions(-)

diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
index e414ad03493..2dac1555d8e 100644
--- a/dlls/kernel32/heap.c
+++ b/dlls/kernel32/heap.c
@@ -313,56 +313,10 @@ HGLOBAL WINAPI GlobalReAlloc( HGLOBAL handle, SIZE_T size, UINT flags )
 
 /***********************************************************************
  *           GlobalSize   (KERNEL32.@)
- *
- * Get the size of a global memory object.
- *
- * PARAMS
- *  handle [I] Handle of the global memory object
- *
- * RETURNS
- *  Failure: 0
- *  Success: Size in Bytes of the global memory object
- *
- * NOTES
- *   When the handle is invalid, last error is set to ERROR_INVALID_HANDLE
- *
  */
 SIZE_T WINAPI GlobalSize( HGLOBAL handle )
 {
-    struct mem_entry *mem;
-    SIZE_T retval;
-    void *ptr;
-
-    TRACE_(globalmem)( "handle %p\n", handle );
-
-    if (!((ULONG_PTR)handle >> 16))
-    {
-        SetLastError( ERROR_INVALID_HANDLE );
-        return 0;
-    }
-
-    if ((ptr = unsafe_ptr_from_HLOCAL( handle )))
-        retval = HeapSize( GetProcessHeap(), 0, ptr );
-    else
-    {
-        RtlLockHeap( GetProcessHeap() );
-        if ((mem = unsafe_mem_from_HLOCAL( handle )))
-        {
-            if (!mem->ptr) /* handle case of GlobalAlloc( ??,0) */
-                retval = 0;
-            else
-                retval = HeapSize( GetProcessHeap(), 0, mem->ptr );
-        }
-        else
-        {
-            WARN_(globalmem)( "invalid handle %p\n", handle );
-            SetLastError( ERROR_INVALID_HANDLE );
-            retval = 0;
-        }
-        RtlUnlockHeap( GetProcessHeap() );
-    }
-    if (retval == ~(SIZE_T)0) retval = 0;
-    return retval;
+    return LocalSize( handle );
 }
 
 
@@ -513,21 +467,33 @@ SIZE_T WINAPI LocalShrink( HGLOBAL handle, UINT newsize )
 
 /***********************************************************************
  *           LocalSize   (KERNEL32.@)
- *
- * Get the size of a local memory object.
- *
- * RETURNS
- *	Size: Success
- *	0: Failure
- *
- * NOTES
- *  Windows memory management does not provide a separate local heap
- *  and global heap.
  */
-SIZE_T WINAPI LocalSize(
-              HLOCAL handle /* [in] Handle of memory object */
-) {
-    return GlobalSize( handle );
+SIZE_T WINAPI LocalSize( HLOCAL handle )
+{
+    HANDLE heap = GetProcessHeap();
+    struct mem_entry *mem;
+    SIZE_T ret = 0;
+    void *ptr;
+
+    TRACE_(globalmem)( "handle %p\n", handle );
+
+    RtlLockHeap( heap );
+    if ((ptr = unsafe_ptr_from_HLOCAL( handle )))
+        ret = HeapSize( heap, HEAP_NO_SERIALIZE, ptr );
+    else if ((mem = unsafe_mem_from_HLOCAL( handle )))
+    {
+        if (!mem->ptr) ret = 0;
+        else ret = HeapSize( heap, HEAP_NO_SERIALIZE, mem->ptr );
+    }
+    else
+    {
+        WARN_(globalmem)( "invalid handle %p\n", handle );
+        SetLastError( ERROR_INVALID_HANDLE );
+    }
+    RtlUnlockHeap( heap );
+
+    if (ret == ~(SIZE_T)0) return 0;
+    return ret;
 }
 
 




More information about the wine-cvs mailing list