MdeModulePkg/CapsuleApp: Use StrToGuid in BaseLib

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Ruiyu Ni 2017-02-21 17:04:29 +08:00
parent 96d3713578
commit 787f6744e7
2 changed files with 6 additions and 161 deletions

View File

@ -1,7 +1,7 @@
/** @file
A shell application that triggers capsule update process.
Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@ -63,144 +63,6 @@ GetArg (
return EFI_SUCCESS;
}
/**
Converts a list of string to a specified buffer.
@param[out] Buf The output buffer that contains the string.
@param[in] BufferLength The length of the buffer
@param[in] Str The input string that contains the hex number
@retval EFI_SUCCESS The string was successfully converted to the buffer.
**/
EFI_STATUS
InternalStrToBuf (
OUT UINT8 *Buf,
IN UINTN BufferLength,
IN CHAR16 *Str
)
{
UINTN Index;
UINTN StrLength;
UINT8 Digit;
UINT8 Byte;
Digit = 0;
//
// Two hex char make up one byte
//
StrLength = BufferLength * sizeof (CHAR16);
for(Index = 0; Index < StrLength; Index++, Str++) {
if ((*Str >= L'a') && (*Str <= L'f')) {
Digit = (UINT8) (*Str - L'a' + 0x0A);
} else if ((*Str >= L'A') && (*Str <= L'F')) {
Digit = (UINT8) (*Str - L'A' + 0x0A);
} else if ((*Str >= L'0') && (*Str <= L'9')) {
Digit = (UINT8) (*Str - L'0');
} else {
return EFI_INVALID_PARAMETER;
}
//
// For odd characters, write the upper nibble for each buffer byte,
// and for even characters, the lower nibble.
//
if ((Index & 1) == 0) {
Byte = (UINT8) (Digit << 4);
} else {
Byte = Buf[Index / 2];
Byte &= 0xF0;
Byte = (UINT8) (Byte | Digit);
}
Buf[Index / 2] = Byte;
}
return EFI_SUCCESS;
}
/**
Converts a string to GUID value.
Guid Format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
@param[in] Str The registry format GUID string that contains the GUID value.
@param[out] Guid A pointer to the converted GUID value.
@retval EFI_SUCCESS The GUID string was successfully converted to the GUID value.
@retval EFI_UNSUPPORTED The input string is not in registry format.
@return others Some error occurred when converting part of GUID value.
**/
EFI_STATUS
InternalStrToGuid (
IN CHAR16 *Str,
OUT EFI_GUID *Guid
)
{
//
// Get the first UINT32 data
//
Guid->Data1 = (UINT32) StrHexToUint64 (Str);
while (!IS_HYPHEN (*Str) && !IS_NULL (*Str)) {
Str ++;
}
if (IS_HYPHEN (*Str)) {
Str++;
} else {
return EFI_UNSUPPORTED;
}
//
// Get the second UINT16 data
//
Guid->Data2 = (UINT16) StrHexToUint64 (Str);
while (!IS_HYPHEN (*Str) && !IS_NULL (*Str)) {
Str ++;
}
if (IS_HYPHEN (*Str)) {
Str++;
} else {
return EFI_UNSUPPORTED;
}
//
// Get the third UINT16 data
//
Guid->Data3 = (UINT16) StrHexToUint64 (Str);
while (!IS_HYPHEN (*Str) && !IS_NULL (*Str)) {
Str ++;
}
if (IS_HYPHEN (*Str)) {
Str++;
} else {
return EFI_UNSUPPORTED;
}
//
// Get the following 8 bytes data
//
InternalStrToBuf (&Guid->Data4[0], 2, Str);
//
// Skip 2 byte hex chars
//
Str += 2 * 2;
if (IS_HYPHEN (*Str)) {
Str++;
} else {
return EFI_UNSUPPORTED;
}
InternalStrToBuf (&Guid->Data4[2], 6, Str);
return EFI_SUCCESS;
}
/**
Return File System Volume containing this shell application.

View File

@ -1,7 +1,7 @@
/** @file
A shell application that triggers capsule update process.
Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@ -142,24 +142,6 @@ WriteFileFromBuffer (
IN VOID *Buffer
);
/**
Converts a string to GUID value.
Guid Format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
@param[in] Str The registry format GUID string that contains the GUID value.
@param[out] Guid A pointer to the converted GUID value.
@retval EFI_SUCCESS The GUID string was successfully converted to the GUID value.
@retval EFI_UNSUPPORTED The input string is not in registry format.
@return others Some error occurred when converting part of GUID value.
**/
EFI_STATUS
InternalStrToGuid (
IN CHAR16 *Str,
OUT EFI_GUID *Guid
);
/**
This function parse application ARG.
@ -731,6 +713,7 @@ UefiMain (
)
{
EFI_STATUS Status;
RETURN_STATUS RStatus;
UINTN FileSize[MAX_CAPSULE_NUM];
VOID *CapsuleBuffer[MAX_CAPSULE_NUM];
EFI_CAPSULE_BLOCK_DESCRIPTOR *BlockDescriptors;
@ -782,10 +765,10 @@ UefiMain (
//
// FMP->GetImage()
//
Status = InternalStrToGuid(Argv[3], &ImageTypeId);
if (EFI_ERROR(Status)) {
RStatus = StrToGuid (Argv[3], &ImageTypeId);
if (RETURN_ERROR (RStatus) || (Argv[3][GUID_STRING_LENGTH] != L'\0')) {
Print (L"Invalid ImageTypeId - %s\n", Argv[3]);
return Status;
return EFI_INVALID_PARAMETER;
}
ImageIndex = StrDecimalToUintn(Argv[4]);
if (StrCmp(Argv[5], L"-O") == 0) {