]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Smbios driver wrong compute the offset when updating string for given handle.
authorklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 11 Dec 2009 11:58:27 +0000 (11:58 +0000)
committerklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 11 Dec 2009 11:58:27 +0000 (11:58 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9556 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.c

index 1cf78024509e000cf15ff395d4008aaf82f12e27..a3a85d59db4cc2ec6187b19afc2e9f7b32d96f57 100644 (file)
@@ -141,7 +141,6 @@ GetSmbiosStructureSize (
   //\r
   while (*CharInStr != 0 || *(CharInStr+1) != 0) { \r
     if (*CharInStr == 0) {\r
-      *NumberOfStrings += 1;\r
       *Size += 1;\r
       CharInStr++;\r
     }\r
@@ -160,12 +159,9 @@ GetSmbiosStructureSize (
     //\r
     CharInStr += StrLen;\r
     *Size += StrLen;\r
-    \r
-  }\r
-\r
-  if (*NumberOfStrings > 0) {\r
     *NumberOfStrings += 1;\r
   }\r
+\r
   //\r
   // count ending two zeros.\r
   //\r
@@ -511,6 +507,11 @@ SmbiosUpdateString (
         } \r
       }\r
 \r
+      if (*StrStart == 0) {\r
+        StrStart ++;\r
+        TargetStrOffset ++;\r
+      }\r
+      \r
       //\r
       // Now we get the string target\r
       //\r
@@ -548,9 +549,11 @@ SmbiosUpdateString (
       //\r
       // Copy smbios structure and optional strings.\r
       //\r
-      CopyMem (Raw, SmbiosEntry->RecordHeader + 1, sizeof(EFI_SMBIOS_TABLE_HEADER) + TargetStrOffset);\r
-      CopyMem ((VOID*)((UINTN)Raw + sizeof(EFI_SMBIOS_TABLE_HEADER) + TargetStrOffset), String, InputStrLen + 1);\r
-      AsciiStrCpy((CHAR8*)((UINTN)Raw + sizeof(EFI_SMBIOS_TABLE_HEADER) + TargetStrOffset + InputStrLen + 1), (CHAR8*)Record + Record->Length + TargetStrOffset + TargetStrLen + 1);\r
+      CopyMem (Raw, SmbiosEntry->RecordHeader + 1, Record->Length + TargetStrOffset);\r
+      CopyMem ((VOID*)((UINTN)Raw + Record->Length + TargetStrOffset), String, InputStrLen + 1);\r
+      CopyMem ((CHAR8*)((UINTN)Raw + Record->Length + TargetStrOffset + InputStrLen + 1),\r
+               (CHAR8*)Record + Record->Length + TargetStrOffset + TargetStrLen + 1,\r
+               SmbiosEntry->RecordHeader->RecordSize - sizeof (EFI_SMBIOS_RECORD_HEADER) - Record->Length - TargetStrOffset - TargetStrLen - 1);\r
 \r
       //\r
       // Insert new record\r