From 418e8cd9240af2249be0cb1d1e38b81b603218e4 Mon Sep 17 00:00:00 2001 From: Ruiyu Ni Date: Tue, 17 Nov 2015 10:08:40 +0000 Subject: MdeModulePkg: Use BmCharToUint in BmIsKeyOptionVariable The patch also moves the BmCharToUint to BmMisc.c because it belongs to misc functions. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni Reviewed-by: Sunny Wang git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18855 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Library/UefiBootManagerLib/BmHotkey.c | 10 ++++----- .../Library/UefiBootManagerLib/BmLoadOption.c | 23 ------------------- MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c | 26 ++++++++++++++++++++++ .../Library/UefiBootManagerLib/InternalBm.h | 13 +++++++++++ 4 files changed, 44 insertions(+), 28 deletions(-) diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmHotkey.c b/MdeModulePkg/Library/UefiBootManagerLib/BmHotkey.c index 8d398fb4c6..ff1cbe933c 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmHotkey.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmHotkey.c @@ -88,6 +88,7 @@ BmIsKeyOptionVariable ( ) { UINTN Index; + UINTN Uint; if (!CompareGuid (Guid, &gEfiGlobalVariableGuid) || (StrSize (Name) != sizeof (L"Key####")) || @@ -98,12 +99,11 @@ BmIsKeyOptionVariable ( *OptionNumber = 0; for (Index = 3; Index < 7; Index++) { - if ((Name[Index] >= L'0') && (Name[Index] <= L'9')) { - *OptionNumber = *OptionNumber * 16 + Name[Index] - L'0'; - } else if ((Name[Index] >= L'A') && (Name[Index] <= L'F')) { - *OptionNumber = *OptionNumber * 16 + Name[Index] - L'A' + 10; - } else { + Uint = BmCharToUint (Name[Index]); + if (Uint == -1) { return FALSE; + } else { + *OptionNumber = (UINT16) Uint + *OptionNumber * 0x10; } } diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c index 07e6249629..6fcd23b6ab 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c @@ -586,29 +586,6 @@ EfiBootManagerDeleteLoadOptionVariable ( return Status; } -/** - Convert a single character to number. - It assumes the input Char is in the scope of L'0' ~ L'9' and L'A' ~ L'F' - - @param Char The input char which need to convert to int. -**/ -UINTN -BmCharToUint ( - IN CHAR16 Char - ) -{ - if ((Char >= L'0') && (Char <= L'9')) { - return (UINTN) (Char - L'0'); - } - - if ((Char >= L'A') && (Char <= L'F')) { - return (UINTN) (Char - L'A' + 0xA); - } - - ASSERT (FALSE); - return (UINTN) -1; -} - /** Returns the size of a device path in bytes. diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c b/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c index 97d1a48cd5..cc2032cd82 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmMisc.c @@ -384,3 +384,29 @@ BmPrintDp ( FreePool (Str); } } + +/** + Convert a single character to number. + It assumes the input Char is in the scope of L'0' ~ L'9' and L'A' ~ L'F' + + @param Char The input char which need to convert to int. + + @return The converted 8-bit number or (UINTN) -1 if conversion failed. +**/ +UINTN +BmCharToUint ( + IN CHAR16 Char + ) +{ + if ((Char >= L'0') && (Char <= L'9')) { + return (UINTN) (Char - L'0'); + } + + if ((Char >= L'A') && (Char <= L'F')) { + return (UINTN) (Char - L'A' + 0xA); + } + + ASSERT (FALSE); + return (UINTN) -1; +} + diff --git a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h index 290ce3fc54..862811e7b5 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h @@ -434,4 +434,17 @@ BmPrintDp ( EFI_DEVICE_PATH_PROTOCOL *DevicePath ); +/** + Convert a single character to number. + It assumes the input Char is in the scope of L'0' ~ L'9' and L'A' ~ L'F' + + @param Char The input char which need to convert to int. + + @return The converted 8-bit number or (UINTN) -1 if conversion failed. +**/ +UINTN +BmCharToUint ( + IN CHAR16 Char + ); + #endif // _INTERNAL_BM_H_ -- cgit v1.2.3