diff options
author | klu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-12-11 11:58:27 +0000 |
---|---|---|
committer | klu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-12-11 11:58:27 +0000 |
commit | f8ee20c982bab5764f61f987a483a8e0aac47e3a (patch) | |
tree | 850a3009d6658ca71bc1cfb36952aee22b9da36e /MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c | |
parent | ed79462beecf7e6fe0a5f1a62cc9f7099b977779 (diff) | |
download | edk2-platforms-f8ee20c982bab5764f61f987a483a8e0aac47e3a.tar.xz |
Smbios driver wrong compute the offset when updating string for given handle.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9556 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c')
-rw-r--r-- | MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c b/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c index 1cf7802450..a3a85d59db 100644 --- a/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c +++ b/MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c @@ -141,7 +141,6 @@ GetSmbiosStructureSize ( //
while (*CharInStr != 0 || *(CharInStr+1) != 0) {
if (*CharInStr == 0) {
- *NumberOfStrings += 1;
*Size += 1;
CharInStr++;
}
@@ -160,12 +159,9 @@ GetSmbiosStructureSize ( //
CharInStr += StrLen;
*Size += StrLen;
-
- }
-
- if (*NumberOfStrings > 0) {
*NumberOfStrings += 1;
}
+
//
// count ending two zeros.
//
@@ -511,6 +507,11 @@ SmbiosUpdateString ( }
}
+ if (*StrStart == 0) {
+ StrStart ++;
+ TargetStrOffset ++;
+ }
+
//
// Now we get the string target
//
@@ -548,9 +549,11 @@ SmbiosUpdateString ( //
// Copy smbios structure and optional strings.
//
- CopyMem (Raw, SmbiosEntry->RecordHeader + 1, sizeof(EFI_SMBIOS_TABLE_HEADER) + TargetStrOffset);
- CopyMem ((VOID*)((UINTN)Raw + sizeof(EFI_SMBIOS_TABLE_HEADER) + TargetStrOffset), String, InputStrLen + 1);
- AsciiStrCpy((CHAR8*)((UINTN)Raw + sizeof(EFI_SMBIOS_TABLE_HEADER) + TargetStrOffset + InputStrLen + 1), (CHAR8*)Record + Record->Length + TargetStrOffset + TargetStrLen + 1);
+ CopyMem (Raw, SmbiosEntry->RecordHeader + 1, Record->Length + TargetStrOffset);
+ CopyMem ((VOID*)((UINTN)Raw + Record->Length + TargetStrOffset), String, InputStrLen + 1);
+ CopyMem ((CHAR8*)((UINTN)Raw + Record->Length + TargetStrOffset + InputStrLen + 1),
+ (CHAR8*)Record + Record->Length + TargetStrOffset + TargetStrLen + 1,
+ SmbiosEntry->RecordHeader->RecordSize - sizeof (EFI_SMBIOS_RECORD_HEADER) - Record->Length - TargetStrOffset - TargetStrLen - 1);
//
// Insert new record
|