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:
klu2
2007-03-16 09:12:20 +00:00
parent 7af45bf1f0
commit bb60dd97af
8 changed files with 30 additions and 90 deletions

View File

@@ -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,

View File

@@ -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>

View File

@@ -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>