Fix the issue that the variable Unicode string may be not aligned on 16-bit boundary in flash (it dependent on ALIGNMENT macro in EdkModulePkg\Universal\Variable\Pei\x64\VarMachine.h). The unalignment Unicode string will lead assert of StrCmp, StrCopy, StrLen function in Mde library.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2482 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -59,43 +59,6 @@ ReleaseLockOnlyAtBootTime (
|
||||
}
|
||||
}
|
||||
|
||||
STATIC
|
||||
UINT32
|
||||
EFIAPI
|
||||
ArrayLength (
|
||||
IN CHAR16 *String
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Determine the length of null terminated char16 array.
|
||||
|
||||
Arguments:
|
||||
|
||||
String Null-terminated CHAR16 array pointer.
|
||||
|
||||
Returns:
|
||||
|
||||
UINT32 Number of bytes in the string, including the double NULL at the end;
|
||||
|
||||
--*/
|
||||
{
|
||||
UINT32 Count;
|
||||
|
||||
if (NULL == String) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Count = 0;
|
||||
|
||||
while (0 != String[Count]) {
|
||||
Count++;
|
||||
}
|
||||
|
||||
return (Count * 2) + 2;
|
||||
}
|
||||
|
||||
STATIC
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
@@ -600,7 +563,7 @@ Returns:
|
||||
return EFI_SUCCESS;
|
||||
} else {
|
||||
if (CompareGuid (VendorGuid, &Variable[Index]->VendorGuid)) {
|
||||
if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable[Index]), ArrayLength (VariableName))) {
|
||||
if (!CompareMem (VariableName, GET_VARIABLE_NAME_PTR (Variable[Index]), Variable[Index]->NameSize)) {
|
||||
PtrTrack->CurrPtr = Variable[Index];
|
||||
PtrTrack->Volatile = (BOOLEAN) Index;
|
||||
return EFI_SUCCESS;
|
||||
@@ -876,7 +839,7 @@ Returns:
|
||||
//
|
||||
Status = EFI_WRITE_PROTECTED;
|
||||
goto Done;
|
||||
} else if (sizeof (VARIABLE_HEADER) + ArrayLength (VariableName) + DataSize > MAX_VARIABLE_SIZE) {
|
||||
} else if (sizeof (VARIABLE_HEADER) + StrSize (VariableName) + DataSize > MAX_VARIABLE_SIZE) {
|
||||
//
|
||||
// The size of the VariableName, including the Unicode Null in bytes plus
|
||||
// the DataSize is limited to maximum size of MAX_VARIABLE_SIZE (1024) bytes.
|
||||
@@ -985,7 +948,7 @@ Returns:
|
||||
//
|
||||
NextVariable->Reserved = 0;
|
||||
VarNameOffset = sizeof (VARIABLE_HEADER);
|
||||
VarNameSize = ArrayLength (VariableName);
|
||||
VarNameSize = StrSize (VariableName);
|
||||
CopyMem (
|
||||
(UINT8 *) ((UINTN) NextVariable + VarNameOffset),
|
||||
VariableName,
|
||||
|
@@ -49,6 +49,9 @@
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>Variable.h</Filename>
|
||||
|
@@ -52,6 +52,9 @@
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>Variable.h</Filename>
|
||||
|
Reference in New Issue
Block a user