Alexandre Julliard : ntdll: Use malloc() to allocate the logical processor information.

Alexandre Julliard julliard at winehq.org
Tue Jul 14 16:23:37 CDT 2020


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Jul 14 10:34:31 2020 +0200

ntdll: Use malloc() to allocate the logical processor information.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/unix/system.c | 99 +++++++++++++++++++-----------------------------
 1 file changed, 40 insertions(+), 59 deletions(-)

diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
index 3557df6108..eedd67fba1 100644
--- a/dlls/ntdll/unix/system.c
+++ b/dlls/ntdll/unix/system.c
@@ -496,32 +496,24 @@ void init_cpu_info(void)
            cpu_info.Architecture, cpu_info.Level, cpu_info.Revision, cpu_info.FeatureSet );
 }
 
-static BOOL grow_logical_proc_buf( SYSTEM_LOGICAL_PROCESSOR_INFORMATION **pdata,
-                                   SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX **pdataex, DWORD *max_len )
+static BOOL grow_logical_proc_buf( SYSTEM_LOGICAL_PROCESSOR_INFORMATION **pdata, DWORD *max_len )
 {
-    if (pdata)
-    {
-        SYSTEM_LOGICAL_PROCESSOR_INFORMATION *new_data;
-
-        *max_len *= 2;
-        new_data = RtlReAllocateHeap(GetProcessHeap(), 0, *pdata, *max_len*sizeof(*new_data));
-        if (!new_data)
-            return FALSE;
-
-        *pdata = new_data;
-    }
-    else
-    {
-        SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *new_dataex;
-
-        *max_len *= 2;
-        new_dataex = RtlReAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, *pdataex, *max_len*sizeof(*new_dataex));
-        if (!new_dataex)
-            return FALSE;
+    SYSTEM_LOGICAL_PROCESSOR_INFORMATION *new_data;
 
-        *pdataex = new_dataex;
-    }
+    *max_len *= 2;
+    if (!(new_data = realloc( *pdata, *max_len*sizeof(*new_data) ))) return FALSE;
+    *pdata = new_data;
+    return TRUE;
+}
 
+static BOOL grow_logical_proc_ex_buf( SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX **pdataex, DWORD *max_len )
+{
+    SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *new_dataex;
+    DWORD new_len = *max_len * 2;
+    if (!(new_dataex = realloc( *pdataex, new_len * sizeof(*new_dataex) ))) return FALSE;
+    memset( new_dataex + *max_len, 0, (new_len - *max_len) * sizeof(*new_dataex) );
+    *pdataex = new_dataex;
+    *max_len = new_len;
     return TRUE;
 }
 
@@ -570,7 +562,7 @@ static BOOL logical_proc_info_add_by_id( SYSTEM_LOGICAL_PROCESSOR_INFORMATION **
 
         while (*len == *pmax_len)
         {
-            if (!grow_logical_proc_buf(pdata, NULL, pmax_len)) return FALSE;
+            if (!grow_logical_proc_buf(pdata, pmax_len)) return FALSE;
         }
 
         (*pdata)[i].Relationship = rel;
@@ -606,7 +598,7 @@ static BOOL logical_proc_info_add_by_id( SYSTEM_LOGICAL_PROCESSOR_INFORMATION **
 
         while (ofs + log_proc_ex_size_plus(sizeof(PROCESSOR_RELATIONSHIP)) > *pmax_len)
         {
-            if (!grow_logical_proc_buf(NULL, pdataex, pmax_len)) return FALSE;
+            if (!grow_logical_proc_ex_buf(pdataex, pmax_len)) return FALSE;
         }
 
         dataex = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)(((char *)*pdataex) + ofs);
@@ -647,7 +639,7 @@ static BOOL logical_proc_info_add_cache( SYSTEM_LOGICAL_PROCESSOR_INFORMATION **
         }
 
         while (*len == *pmax_len)
-            if (!grow_logical_proc_buf(pdata, NULL, pmax_len)) return FALSE;
+            if (!grow_logical_proc_buf(pdata, pmax_len)) return FALSE;
 
         (*pdata)[i].Relationship = RelationCache;
         (*pdata)[i].ProcessorMask = mask;
@@ -670,7 +662,7 @@ static BOOL logical_proc_info_add_cache( SYSTEM_LOGICAL_PROCESSOR_INFORMATION **
 
         while (ofs + log_proc_ex_size_plus(sizeof(CACHE_RELATIONSHIP)) > *pmax_len)
         {
-            if (!grow_logical_proc_buf(NULL, pdataex, pmax_len)) return FALSE;
+            if (!grow_logical_proc_ex_buf(pdataex, pmax_len)) return FALSE;
         }
 
         dataex = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)(((char *)*pdataex) + ofs);
@@ -698,7 +690,7 @@ static BOOL logical_proc_info_add_numa_node( SYSTEM_LOGICAL_PROCESSOR_INFORMATIO
     if (pdata)
     {
         while (*len == *pmax_len)
-            if (!grow_logical_proc_buf(pdata, NULL, pmax_len)) return FALSE;
+            if (!grow_logical_proc_buf(pdata, pmax_len)) return FALSE;
 
         (*pdata)[*len].Relationship = RelationNumaNode;
         (*pdata)[*len].ProcessorMask = mask;
@@ -711,7 +703,7 @@ static BOOL logical_proc_info_add_numa_node( SYSTEM_LOGICAL_PROCESSOR_INFORMATIO
 
         while (*len + log_proc_ex_size_plus(sizeof(NUMA_NODE_RELATIONSHIP)) > *pmax_len)
         {
-            if (!grow_logical_proc_buf(NULL, pdataex, pmax_len)) return FALSE;
+            if (!grow_logical_proc_ex_buf(pdataex, pmax_len)) return FALSE;
         }
 
         dataex = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)(((char *)*pdataex) + *len);
@@ -734,7 +726,7 @@ static BOOL logical_proc_info_add_group( SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
     SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *dataex;
 
     while (*len + log_proc_ex_size_plus(sizeof(GROUP_RELATIONSHIP)) > *pmax_len)
-        if (!grow_logical_proc_buf(NULL, pdataex, pmax_len)) return FALSE;
+        if (!grow_logical_proc_ex_buf(pdataex, pmax_len)) return FALSE;
 
     dataex = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *)(((char *)*pdataex) + *len);
 
@@ -2479,27 +2471,23 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class,
         /* Each logical processor may use up to 7 entries in returned table:
          * core, numa node, package, L1i, L1d, L2, L3 */
         len = 7 * NtCurrentTeb()->Peb->NumberOfProcessors;
-        buf = RtlAllocateHeap(GetProcessHeap(), 0, len * sizeof(*buf));
+        buf = malloc( len * sizeof(*buf) );
         if (!buf)
         {
             ret = STATUS_NO_MEMORY;
             break;
         }
-
         ret = create_logical_proc_info(&buf, NULL, &len, RelationAll);
-        if( ret != STATUS_SUCCESS )
+        if (!ret)
         {
-            RtlFreeHeap(GetProcessHeap(), 0, buf);
-            break;
-        }
-
-        if (size >= len)
-        {
-            if (!info) ret = STATUS_ACCESS_VIOLATION;
-            else memcpy( info, buf, len);
+            if (size >= len)
+            {
+                if (!info) ret = STATUS_ACCESS_VIOLATION;
+                else memcpy( info, buf, len);
+            }
+            else ret = STATUS_INFO_LENGTH_MISMATCH;
         }
-        else ret = STATUS_INFO_LENGTH_MISMATCH;
-        RtlFreeHeap(GetProcessHeap(), 0, buf);
+        free( buf );
         break;
     }
 
@@ -2600,29 +2588,22 @@ NTSTATUS WINAPI NtQuerySystemInformationEx( SYSTEM_INFORMATION_CLASS class,
         }
 
         len = 3 * sizeof(*buf);
-        buf = RtlAllocateHeap(GetProcessHeap(), 0, len);
-        if (!buf)
+        if (!(buf = malloc( len )))
         {
             ret = STATUS_NO_MEMORY;
             break;
         }
-
         ret = create_logical_proc_info(NULL, &buf, &len, *(DWORD *)query);
-        if (ret != STATUS_SUCCESS)
-        {
-            RtlFreeHeap(GetProcessHeap(), 0, buf);
-            break;
-        }
-
-        if (size >= len)
+        if (!ret)
         {
-            if (!info) ret = STATUS_ACCESS_VIOLATION;
-            else memcpy(info, buf, len);
+            if (size >= len)
+            {
+                if (!info) ret = STATUS_ACCESS_VIOLATION;
+                else memcpy(info, buf, len);
+            }
+            else ret = STATUS_INFO_LENGTH_MISMATCH;
         }
-        else
-            ret = STATUS_INFO_LENGTH_MISMATCH;
-
-        RtlFreeHeap(GetProcessHeap(), 0, buf);
+        free( buf );
         break;
     }
 




More information about the wine-cvs mailing list