]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/HiiDatabaseDxe/Font.c
Using sizeof(EFO_BLOCK_IO_MEDIA) replace Macro.
[mirror_edk2.git] / MdeModulePkg / Universal / HiiDatabaseDxe / Font.c
index 06b09e7f7625185baedfb912bad3987f26c85c70..dfb21673fde167ecc6543041ad526b13f0918558 100644 (file)
@@ -1566,6 +1566,7 @@ HiiStringToImage (
   Status        = EFI_SUCCESS;\r
   StringIn2     = NULL;\r
   SystemDefault = NULL;\r
+  StringIn      = NULL;\r
 \r
   //\r
   // Calculate the string output information, including specified color and font .\r
@@ -1596,11 +1597,13 @@ HiiStringToImage (
       Foreground  = ((EFI_FONT_DISPLAY_INFO *) StringInfo)->ForegroundColor;\r
       Background  = ((EFI_FONT_DISPLAY_INFO *) StringInfo)->BackgroundColor;\r
 \r
-    } else {\r
+    } else if (Status == EFI_SUCCESS) {\r
       FontInfo   = &StringInfoOut->FontInfo;\r
       Height     = StringInfoOut->FontInfo.FontSize;\r
       Foreground = StringInfoOut->ForegroundColor;\r
       Background = StringInfoOut->BackgroundColor;\r
+    } else {\r
+      goto Exit;\r
     }\r
   }\r
 \r
@@ -1609,7 +1612,6 @@ HiiStringToImage (
   //\r
 \r
   StringPtr = String;\r
-  StringIn  = NULL;\r
 \r
   //\r
   // Ignore line-break characters only. Hyphens or dash character will be displayed\r
@@ -2087,12 +2089,17 @@ HiiStringIdToImage (
 {\r
   EFI_STATUS                          Status;\r
   HII_DATABASE_PRIVATE_DATA           *Private;\r
+  EFI_HII_STRING_PROTOCOL             *HiiString;\r
   EFI_STRING                          String;\r
   UINTN                               StringSize;\r
   UINTN                               FontLen;\r
   EFI_FONT_INFO                       *StringFontInfo;\r
   EFI_FONT_DISPLAY_INFO               *NewStringInfo;\r
-  CHAR8                               CurrentLang[RFC_3066_ENTRY_SIZE];\r
+  CHAR8                               TempSupportedLanguages;\r
+  CHAR8                               *SupportedLanguages;\r
+  UINTN                               SupportedLanguagesSize;\r
+  CHAR8                               *CurrentLanguage;\r
+  CHAR8                               *BestLanguage;\r
 \r
   if (This == NULL || PackageList == NULL || Blt == NULL || PackageList == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -2103,57 +2110,104 @@ HiiStringIdToImage (
   }\r
 \r
   //\r
-  // When Language points to NULL, current system language is used.\r
+  // Initialize string pointers to be NULL\r
   //\r
-  if (Language != NULL) {\r
-    AsciiStrCpy (CurrentLang, (CHAR8 *) Language);\r
-  } else {\r
-    GetCurrentLanguage (CurrentLang);\r
-  }\r
+  SupportedLanguages = NULL;\r
+  CurrentLanguage    = NULL;\r
+  BestLanguage       = NULL;\r
+  String             = NULL;\r
+  StringInfo         = NULL;\r
+  StringFontInfo     = NULL;\r
+  NewStringInfo      = NULL;\r
 \r
   //\r
   // Get the string to be displayed.\r
   //\r
+  Private   = HII_FONT_DATABASE_PRIVATE_DATA_FROM_THIS (This);\r
+  HiiString = &Private->HiiString;\r
+\r
+  //\r
+  // Get the size of supported language.\r
+  //\r
+  SupportedLanguagesSize = 0;\r
+  Status = HiiString->GetLanguages (\r
+                        HiiString,\r
+                        PackageList,\r
+                        &TempSupportedLanguages,\r
+                        &SupportedLanguagesSize\r
+                        );\r
+  if (Status != EFI_BUFFER_TOO_SMALL) {\r
+    return Status;\r
+  }\r
+\r
+  SupportedLanguages = AllocatePool (SupportedLanguagesSize);\r
+  if (SupportedLanguages == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
 \r
+  Status = HiiString->GetLanguages (\r
+                        HiiString,\r
+                        PackageList,\r
+                        SupportedLanguages,\r
+                        &SupportedLanguagesSize\r
+                        );\r
+  if (EFI_ERROR (Status)) {\r
+    goto Exit;\r
+  }\r
\r
+  if (Language == NULL) {\r
+    Language = "";\r
+  }\r
+  CurrentLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
+  BestLanguage = GetBestLanguage (\r
+                   SupportedLanguages,\r
+                   FALSE,\r
+                   Language,\r
+                   (CurrentLanguage == NULL) ? CurrentLanguage : "",\r
+                   (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang),\r
+                   NULL\r
+                   );\r
+  if (BestLanguage == NULL) {\r
+    Status = EFI_NOT_FOUND;\r
+    goto Exit;\r
+  }\r
+    \r
   StringSize = MAX_STRING_LENGTH;\r
   String = (EFI_STRING) AllocateZeroPool (StringSize);\r
   if (String == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Exit;\r
   }\r
 \r
-  Private        = HII_FONT_DATABASE_PRIVATE_DATA_FROM_THIS (This);\r
-  StringFontInfo = NULL;\r
-  NewStringInfo  = NULL;\r
-  \r
-  Status = Private->HiiString.GetString (\r
-                                &Private->HiiString,\r
-                                CurrentLang,\r
-                                PackageList,\r
-                                StringId,\r
-                                String,\r
-                                &StringSize,\r
-                                &StringFontInfo\r
-                                );\r
+  Status = HiiString->GetString (\r
+                        HiiString,\r
+                        BestLanguage,\r
+                        PackageList,\r
+                        StringId,\r
+                        String,\r
+                        &StringSize,\r
+                        &StringFontInfo\r
+                        );\r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
     FreePool (String);\r
     String = (EFI_STRING) AllocateZeroPool (StringSize);\r
     if (String == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
+      Status = EFI_OUT_OF_RESOURCES;\r
+      goto Exit;\r
     }\r
-    Status = Private->HiiString.GetString (\r
-                                  &Private->HiiString,\r
-                                  Language,\r
-                                  PackageList,\r
-                                  StringId,\r
-                                  String,\r
-                                  &StringSize,\r
-                                  NULL\r
-                                  );\r
-\r
+    Status = HiiString->GetString (\r
+                          HiiString,\r
+                          BestLanguage,\r
+                          PackageList,\r
+                          StringId,\r
+                          String,\r
+                          &StringSize,\r
+                          NULL\r
+                          );\r
   }\r
 \r
   if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
+    goto Exit;\r
   }\r
     \r
   //\r
@@ -2202,6 +2256,15 @@ HiiStringIdToImage (
            );\r
 \r
 Exit:\r
+  if (SupportedLanguages != NULL) {\r
+    FreePool (SupportedLanguages);\r
+  }\r
+  if (CurrentLanguage != NULL) {\r
+    FreePool (CurrentLanguage);\r
+  }\r
+  if (BestLanguage != NULL) {\r
+    FreePool (BestLanguage);\r
+  }\r
   if (String != NULL) {\r
     FreePool (String);\r
   }\r
@@ -2482,7 +2545,11 @@ HiiGetFontInfo (
       goto Exit;\r
     }\r
   }\r
-\r
+  \r
+  //\r
+  // StringInfoIn must not be NULL if it is not system default font info.\r
+  //\r
+  ASSERT (StringInfoIn != NULL);\r
   //\r
   // Check the font information mask to make sure it is valid.\r
   //\r