[ros-diffs] [fireball] 31996: - Add a runtime switch between using freeldr-embedded configuration tree heap, or using a real heap allocation (for NT-way). - Use that in winldr.

fireball at svn.reactos.org fireball at svn.reactos.org
Fri Jan 25 16:08:27 CET 2008


Author: fireball
Date: Fri Jan 25 18:08:27 2008
New Revision: 31996

URL: http://svn.reactos.org/svn/reactos?rev=31996&view=rev
Log:
- Add a runtime switch between using freeldr-embedded configuration tree heap, or using a real heap allocation (for NT-way).
- Use that in winldr.

Modified:
    trunk/reactos/boot/freeldr/freeldr/reactos/archwsup.c
    trunk/reactos/boot/freeldr/freeldr/windows/winldr.c

Modified: trunk/reactos/boot/freeldr/freeldr/reactos/archwsup.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/reactos/archwsup.c?rev=31996&r1=31995&r2=31996&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/reactos/archwsup.c (original)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/archwsup.c Fri Jan 25 18:08:27 2008
@@ -18,6 +18,8 @@
 ULONG FldrpHwHeapLocation;
 PCONFIGURATION_COMPONENT_DATA FldrArcHwTreeRoot;
 
+BOOLEAN UseRealHeap = FALSE;
+
 /* FUNCTIONS ******************************************************************/
 
 PVOID
@@ -25,13 +27,21 @@
 FldrpHwHeapAlloc(IN ULONG Size)
 {
     PVOID Buffer;
-    
-    /* Return a block of memory from the ARC Hardware Heap */
-    Buffer = &reactos_arc_hardware_data[FldrpHwHeapLocation];
-    
-    /* Increment the heap location */
-    FldrpHwHeapLocation += Size;
-    if (FldrpHwHeapLocation > HW_MAX_ARC_HEAP_SIZE) Buffer = NULL;
+
+    if (UseRealHeap)
+    {
+        /* Allocate memory from generic bootloader heap */
+        Buffer = MmHeapAlloc(Size);
+    }
+    else
+    {
+        /* Return a block of memory from the ARC Hardware Heap */
+        Buffer = &reactos_arc_hardware_data[FldrpHwHeapLocation];
+
+        /* Increment the heap location */
+        FldrpHwHeapLocation += Size;
+        if (FldrpHwHeapLocation > HW_MAX_ARC_HEAP_SIZE) Buffer = NULL;
+    }
 
     /* Clear it */
     if (Buffer)

Modified: trunk/reactos/boot/freeldr/freeldr/windows/winldr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/windows/winldr.c?rev=31996&r1=31995&r2=31996&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/windows/winldr.c (original)
+++ trunk/reactos/boot/freeldr/freeldr/windows/winldr.c Fri Jan 25 18:08:27 2008
@@ -29,6 +29,8 @@
 extern ARC_DISK_SIGNATURE reactos_arc_disk_info[];
 extern char reactos_arc_strings[32][256];
 
+extern BOOLEAN UseRealHeap;
+
 BOOLEAN
 WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock,
                         IN PCH DllName,
@@ -429,6 +431,7 @@
 	AllocateAndInitLPB(&LoaderBlock);
 
 	/* Detect hardware */
+	UseRealHeap = TRUE;
 	LoaderBlock->ConfigurationRoot = MachHwDetect();
 
 	/* Load kernel */




More information about the Ros-diffs mailing list