\r
Boot option manipulation\r
\r
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
UINTN MenuCount;\r
UINT8 *Ptr;\r
- \r
+\r
MenuCount = 0;\r
BootOrderListSize = 0;\r
BootNextSize = 0;\r
if (BootOrderList == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
- \r
+\r
//\r
// Get the BootNext from the Var\r
//\r
\r
NewLoadContext->FilePathListLength = *(UINT16 *) LoadOptionPtr;\r
LoadOptionPtr += sizeof (UINT16);\r
- \r
+\r
StringSize = StrSize((UINT16*)LoadOptionPtr);\r
\r
NewLoadContext->Description = AllocateCopyPool (StrSize((UINT16*)LoadOptionPtr), LoadOptionPtr);\r
Str = AllocateZeroPool (MaxLen * sizeof (CHAR16));\r
ASSERT (Str != NULL);\r
\r
- TmpStr = AllocateZeroPool (MaxLen * sizeof (CHAR16)); \r
+ TmpStr = AllocateZeroPool (MaxLen * sizeof (CHAR16));\r
ASSERT (TmpStr != NULL);\r
\r
StrCatS (Str, MaxLen, Str1);\r
//\r
\r
//\r
- // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle copy of two strings \r
+ // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle copy of two strings\r
// that overlap.\r
//\r
StrCpyS (TmpStr, MaxLen, Ptr + 3);\r
- StrCpyS (LastSlash, MaxLen - (UINTN) (LastSlash - Str), TmpStr);\r
+ StrCpyS (LastSlash, MaxLen - ((UINTN) LastSlash - (UINTN) Str) / sizeof (CHAR16), TmpStr);\r
Ptr = LastSlash;\r
} else if (*Ptr == '\\' && *(Ptr + 1) == '.' && *(Ptr + 2) == '\\') {\r
//\r
//\r
\r
//\r
- // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle copy of two strings \r
+ // Use TmpStr as a backup, as StrCpyS in BaseLib does not handle copy of two strings\r
// that overlap.\r
//\r
StrCpyS (TmpStr, MaxLen, Ptr + 2);\r
- StrCpyS (Ptr, MaxLen - (UINTN) (Ptr - Str), TmpStr);\r
+ StrCpyS (Ptr, MaxLen - ((UINTN) Ptr - (UINTN) Str) / sizeof (CHAR16), TmpStr);\r
Ptr = LastSlash;\r
} else if (*Ptr == '\\') {\r
LastSlash = Ptr;\r
}\r
\r
FreePool (TmpStr);\r
- \r
+\r
return Str;\r
}\r
\r
return FALSE;\r
}\r
\r
-/**\r
-\r
- Check whether current FileName point to a valid Efi Application\r
-\r
- @param Dir Pointer to current Directory\r
- @param FileName Pointer to current File name.\r
\r
- @retval TRUE Is a valid Efi Application\r
- @retval FALSE not a valid Efi Application\r
-\r
-**/\r
-BOOLEAN\r
-BOpt_IsEfiApp (\r
- IN EFI_FILE_HANDLE Dir,\r
- IN UINT16 *FileName\r
- )\r
-{\r
- UINTN BufferSize;\r
- EFI_IMAGE_DOS_HEADER DosHdr;\r
- UINT16 Subsystem;\r
- EFI_FILE_HANDLE File;\r
- EFI_STATUS Status;\r
- EFI_IMAGE_OPTIONAL_HEADER_UNION PeHdr;\r
-\r
- Status = Dir->Open (Dir, &File, FileName, EFI_FILE_MODE_READ, 0);\r
-\r
- if (EFI_ERROR (Status)) {\r
- return FALSE;\r
- }\r
-\r
- BufferSize = sizeof (EFI_IMAGE_DOS_HEADER);\r
- File->Read (File, &BufferSize, &DosHdr);\r
- if (DosHdr.e_magic != EFI_IMAGE_DOS_SIGNATURE) {\r
- File->Close (File);\r
- return FALSE;\r
- }\r
-\r
- File->SetPosition (File, DosHdr.e_lfanew);\r
- BufferSize = sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION);\r
- File->Read (File, &BufferSize, &PeHdr);\r
- if (PeHdr.Pe32.Signature != EFI_IMAGE_NT_SIGNATURE) {\r
- File->Close (File);\r
- return FALSE;\r
- }\r
- //\r
- // Determine PE type and read subsytem\r
- //\r
- if (PeHdr.Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
- Subsystem = PeHdr.Pe32.OptionalHeader.Subsystem;\r
- } else if (PeHdr.Pe32.OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {\r
- Subsystem = PeHdr.Pe32Plus.OptionalHeader.Subsystem;\r
- } else {\r
- return FALSE;\r
- }\r
-\r
- if (Subsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {\r
- File->Close (File);\r
- return TRUE;\r
- } else {\r
- File->Close (File);\r
- return FALSE;\r
- }\r
-}\r
\r
/**\r
\r
if (DriverOrderList == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
- \r
+\r
for (Index = 0; Index < DriverOrderListSize / sizeof (UINT16); Index++) {\r
UnicodeSPrint (\r
DriverString,\r
UINTN Index;\r
UINTN OptionIndex;\r
UINT16 PageIdList[5];\r
- UINTN PageNum; \r
+ UINTN PageNum;\r
UINTN VarSize;\r
- UINT8 *VarData; \r
- UINT8 *WorkingVarData; \r
+ UINT8 *VarData;\r
+ UINT8 *WorkingVarData;\r
LEGACY_DEV_ORDER_ENTRY *DevOrder;\r
- UINT16 VarDevOrder; \r
- UINT8 *DisMap; \r
+ UINT16 VarDevOrder;\r
+ UINT8 *DisMap;\r
BM_MENU_OPTION *OptionMenu;\r
BBS_TYPE BbsType;\r
UINT8 *LegacyOrder;\r
- UINT8 *OldData; \r
+ UINT8 *OldData;\r
UINTN Pos;\r
UINTN Bit;\r
- \r
+\r
ASSERT (CallbackData != NULL);\r
\r
PageIdList[0] = FORM_SET_FD_ORDER_ID;\r
\r
for (Index = 0; Index < PageNum; Index++) {\r
switch (PageIdList[Index]) {\r
- \r
+\r
case FORM_SET_FD_ORDER_ID:\r
OptionMenu = (BM_MENU_OPTION *) &LegacyFDMenu;\r
BbsType = BBS_FLOPPY;\r
LegacyOrder = CallbackData->BmmFakeNvData.LegacyHD;\r
OldData = CallbackData->BmmOldFakeNVData.LegacyHD;\r
break;\r
- \r
+\r
case FORM_SET_CD_ORDER_ID:\r
OptionMenu = (BM_MENU_OPTION *) &LegacyCDMenu;\r
BbsType = BBS_CDROM;\r
LegacyOrder = CallbackData->BmmFakeNvData.LegacyCD;\r
OldData = CallbackData->BmmOldFakeNVData.LegacyCD;\r
break;\r
- \r
+\r
case FORM_SET_NET_ORDER_ID:\r
OptionMenu = (BM_MENU_OPTION *) &LegacyNETMenu;\r
BbsType = BBS_EMBED_NETWORK;\r
OldData = CallbackData->BmmOldFakeNVData.LegacyBEV;\r
break;\r
}\r
- \r
+\r
if (NULL != VarData) {\r
WorkingVarData = VarData;\r
DevOrder = (LEGACY_DEV_ORDER_ENTRY *) WorkingVarData;\r
if (DevOrder->BbsType == BbsType) {\r
break;\r
}\r
- \r
+\r
WorkingVarData = (UINT8 *)((UINTN)WorkingVarData + sizeof (BBS_TYPE));\r
WorkingVarData += *(UINT16 *) WorkingVarData;\r
DevOrder = (LEGACY_DEV_ORDER_ENTRY *) WorkingVarData;\r
- } \r
+ }\r
for (OptionIndex = 0; OptionIndex < OptionMenu->MenuNumber; OptionIndex++) {\r
VarDevOrder = *(UINT16 *) ((UINTN) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + OptionIndex * sizeof (UINT16));\r
if (0xFF00 == (VarDevOrder & 0xFF00)) {\r
} else {\r
LegacyOrder[OptionIndex] = (UINT8) (VarDevOrder & 0xFF);\r
}\r
- } \r
+ }\r
CopyMem (OldData, LegacyOrder, 100);\r
}\r
- } \r
+ }\r
}\r
\r
/**\r
Get driver option order from globalc DriverOptionMenu.\r
\r
@param CallbackData The BMM context data.\r
- \r
+\r
**/\r
VOID\r
GetDriverOrder (\r