]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/String.c
1) Fix GCC version EBC interpreter bug.
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / String.c
index f7a7d7fd55b841e3715c8bebd1c3210b9f0add7a..52d348c5720e50302d8a1096559fbd06895693ad 100644 (file)
@@ -1959,6 +1959,31 @@ HiiGetSecondaryLanguages (
   return EFI_INVALID_LANGUAGE;\r
 }\r
 \r
+/**\r
+  Converts the ascii character of the string from uppercase to lowercase.\r
+  This is a internal function.\r
+\r
+  @param ConfigString  String to be converted\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+AsciiHiiToLower (\r
+  IN CHAR8  *ConfigString\r
+  )\r
+{\r
+  ASSERT (ConfigString != NULL);\r
+\r
+  //\r
+  // Convert all hex digits in range [A-F] in the configuration header to [a-f]\r
+  //\r
+  for (; *ConfigString != '\0'; ConfigString++) {\r
+    if ( *ConfigString >= 'A' && *ConfigString <= 'Z') {\r
+      *ConfigString = (CHAR8) (*ConfigString - 'A' + 'a');\r
+    }\r
+  }\r
+}\r
+\r
 /**\r
   Compare whether two names of languages are identical.\r
 \r
@@ -1976,12 +2001,30 @@ HiiCompareLanguage (
   )\r
 {\r
   UINTN  Index;\r
+  UINTN  StrLen;\r
+  CHAR8  *Lan1;\r
+  CHAR8  *Lan2;\r
+\r
+  //\r
+  // Convert to lower to compare.\r
+  //\r
+  StrLen = AsciiStrSize (Language1);\r
+  Lan1   = AllocateZeroPool (StrLen);\r
+  ASSERT (Lan1 != NULL);\r
+  AsciiStrCpy(Lan1, Language1);\r
+  AsciiHiiToLower (Lan1);\r
+\r
+  StrLen = AsciiStrSize (Language2);\r
+  Lan2   = AllocateZeroPool (StrLen);\r
+  ASSERT (Lan2 != NULL);\r
+  AsciiStrCpy(Lan2, Language2);\r
+  AsciiHiiToLower (Lan2);\r
 \r
   //\r
   // Compare the Primary Language in Language1 to Language2\r
   //\r
-  for (Index = 0; Language1[Index] != 0 && Language1[Index] != ';'; Index++) {\r
-    if (Language1[Index] != Language2[Index]) {\r
+  for (Index = 0; Lan1[Index] != 0 && Lan1[Index] != ';'; Index++) {\r
+    if (Lan1[Index] != Lan2[Index]) {\r
       //\r
       // Return FALSE if any characters are different.\r
       //\r
@@ -1989,6 +2032,9 @@ HiiCompareLanguage (
     }\r
   }\r
 \r
+  FreePool (Lan1);\r
+  FreePool (Lan2);\r
+\r
   //\r
   // Only return TRUE if Language2[Index] is a Null-terminator which means\r
   // the Primary Language in Language1 is the same length as Language2.  If\r