Author: ion
Date: Mon Oct 5 01:02:56 2015
New Revision: 69450
URL:
http://svn.reactos.org/svn/reactos?rev=69450&view=rev
Log:
[BOOTLIB]:
- Fix BCD bugs.
Modified:
trunk/reactos/boot/environ/app/bootmgr/bootmgr.c
trunk/reactos/boot/environ/app/bootmgr/efiemu.c
trunk/reactos/boot/environ/lib/misc/bcd.c
Modified: trunk/reactos/boot/environ/app/bootmgr/bootmgr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/app/bootmgr/b…
==============================================================================
--- trunk/reactos/boot/environ/app/bootmgr/bootmgr.c [iso-8859-1] (original)
+++ trunk/reactos/boot/environ/app/bootmgr/bootmgr.c [iso-8859-1] Mon Oct 5 01:02:56
2015
@@ -505,6 +505,7 @@
PVOID FinalBuffer;
UNICODE_STRING BcdString;
+ /* Initialize variables */
PathBuffer = NULL;
BcdDevice = NULL;
BcdPath = NULL;
@@ -559,6 +560,7 @@
/* Otherwise, compute the hardcoded path of the BCD */
Status = BmpFwGetFullPath(L"\\BCD", &FullPath);
+ EfiPrintf(L"Status: %lx %s\r\n", Status, FullPath);
if (!NT_SUCCESS(Status))
{
/* User the raw path */
Modified: trunk/reactos/boot/environ/app/bootmgr/efiemu.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/app/bootmgr/e…
==============================================================================
--- trunk/reactos/boot/environ/app/bootmgr/efiemu.c [iso-8859-1] (original)
+++ trunk/reactos/boot/environ/app/bootmgr/efiemu.c [iso-8859-1] Mon Oct 5 01:02:56 2015
@@ -803,7 +803,7 @@
/* Calculate where the next option should go */
Option = (PVOID)((ULONG_PTR)Option + Size);
- /* Convert the path oprtion */
+ /* Convert the path option */
Status = EfiInitpConvertEfiFilePath(OsDevicePath,
BcdOSLoaderString_SystemRoot,
Option,
Modified: trunk/reactos/boot/environ/lib/misc/bcd.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/environ/lib/misc/bcd.…
==============================================================================
--- trunk/reactos/boot/environ/lib/misc/bcd.c [iso-8859-1] (original)
+++ trunk/reactos/boot/environ/lib/misc/bcd.c [iso-8859-1] Mon Oct 5 01:02:56 2015
@@ -20,7 +20,7 @@
)
{
ULONG_PTR NextOption = 0, ListOption;
- PBL_BCD_OPTION Option;
+ PBL_BCD_OPTION Option, FoundOption;
/* No options, bail out */
if (!List)
@@ -29,12 +29,14 @@
}
/* Loop while we find an option */
- while (TRUE)
+ FoundOption = NULL;
+ do
{
/* Get the next option and see if it matches the type */
Option = (PBL_BCD_OPTION)((ULONG_PTR)List + NextOption);
if ((Option->Type == Type) && !(Option->Empty))
{
+ FoundOption = Option;
break;
}
@@ -49,20 +51,18 @@
Option = MiscGetBootOption((PBL_BCD_OPTION)((ULONG_PTR)Option +
ListOption),
Type);
-
- /* Found one, return it */
if (Option)
{
- return Option;
+ /* Return it */
+ FoundOption = Option;
+ break;
}
}
- }
-
- /* We found the option, return it */
- return Option;
-}
-
-
+ } while (NextOption);
+
+ /* Return the option that was found, if any */
+ return FoundOption;
+}
/*++
* @name BlGetBootOptionListSize
@@ -94,7 +94,7 @@
/* Update the offset */
NextOffset = NextOption->NextEntryOffset;
- } while (NextOffset != 0);
+ } while (NextOffset);
/* Return final computed size */
return Size;
@@ -119,7 +119,7 @@
ULONG Size, Offset;
/* Check if there's any data */
- if (BcdOption->DataOffset != 0)
+ if (BcdOption->DataOffset)
{
/* Add the size of the data */
Size = BcdOption->DataOffset + BcdOption->DataSize;
@@ -132,7 +132,7 @@
/* Any associated options? */
Offset = BcdOption->ListOffset;
- if (Offset != 0)
+ if (Offset)
{
/* Go get those too */
Size += BlGetBootOptionListSize((PVOID)((ULONG_PTR)BcdOption + Offset));
@@ -167,11 +167,13 @@
{
/* Extract the string */
String = (PWCHAR)((ULONG_PTR)Option + Option->DataOffset);
+ Status = STATUS_SUCCESS;
}
else
{
/* No string is present */
String = NULL;
+ Status = STATUS_NOT_FOUND;
}
/* Compute the data size */
@@ -182,9 +184,7 @@
AppIdentifier = BlGetApplicationIdentifier();
Status = BlpBootOptionCallbackString(AppIdentifier, Type, String, StringLength,
&String, &StringLength);
#else
- Status = STATUS_SUCCESS;
#endif
-
/* Check if we have space for one more character */
CopyLength = StringLength + 1;
if (CopyLength < StringLength)
@@ -192,11 +192,6 @@
/* Nope, we'll overflow */
CopyLength = -1;
Status = STATUS_INTEGER_OVERFLOW;
- }
- else
- {
- /* Go ahead */
- Status = STATUS_SUCCESS;
}
/* No overflow? */
@@ -331,7 +326,6 @@
}
#else
/* No secure boot, so the secure descriptors are the standard ones */
- Status = STATUS_SUCCESS;
SecureDescriptor = DeviceDescriptor;
SecureListData = ListCopy;
#endif
@@ -765,6 +759,7 @@
/* Assume failure */
LocalHandle = NULL;
+ EfiPrintf(L"Opening BCD store: %wZ\n", FileName);
/* Allocate a path descriptor */
Length = FileName->Length + sizeof(*FilePath);