]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg: UefiLib: Add a function to check if a language is supported
authorTom Zhao <tzhao@solarflare.com>
Tue, 20 Aug 2019 14:08:43 +0000 (15:08 +0100)
committerLiming Gao <liming.gao@intel.com>
Tue, 17 Sep 2019 01:39:04 +0000 (09:39 +0800)
Add a function that checks if a target language is in the supported
languages list. Add some calls to this function where appropriate in
UefiLib.c

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Tom Zhao <tzhao@solarflare.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
MdePkg/Include/Library/UefiLib.h
MdePkg/Library/UefiLib/UefiLib.c

index 1650f30ddbc662b46e915a3afbcdb2f51acd482d..67c6f96747caca191fedbe80c614f8fef40ef15d 100644 (file)
@@ -461,6 +461,23 @@ EfiTestChildHandle (
   IN CONST EFI_GUID         *ProtocolGuid\r
   );\r
 \r
+/**\r
+ * This function checks the supported languages list for a target language,\r
+ * This only supports RFC 4646 Languages.\r
+ *\r
+ * @param      SupportedLanguages  The supported languages\r
+ * @param      TargetLanguage      The target language\r
+ *\r
+ * @return     Returns EFI_SUCCESS if the language is supported,\r
+ *             EFI_UNSUPPORTED otherwise\r
+ */\r
+EFI_STATUS\r
+EFIAPI\r
+IsLanguageSupported (\r
+  IN CONST CHAR8 *SupportedLanguages,\r
+  IN CONST CHAR8 *TargetLanguage\r
+  );\r
+\r
 /**\r
   This function looks up a Unicode string in UnicodeStringTable.\r
 \r
index daa4af762e6243f08ea14b67555d9a150dad5fd4..cc03be84c2d82de82887913a47703fa5f204f162 100644 (file)
@@ -640,6 +640,36 @@ EfiTestChildHandle (
   return Status;\r
 }\r
 \r
+/**\r
+ * This function checks the supported languages list for a target language,\r
+ * This only supports RFC 4646 Languages.\r
+ *\r
+ * @param      SupportedLanguages  The supported languages\r
+ * @param      TargetLanguage      The target language\r
+ *\r
+ * @return     Returns EFI_SUCCESS if the language is supported,\r
+ *             EFI_UNSUPPORTED otherwise\r
+ */\r
+EFI_STATUS\r
+EFIAPI\r
+IsLanguageSupported (\r
+  IN CONST CHAR8 *SupportedLanguages,\r
+  IN CONST CHAR8 *TargetLanguage\r
+  )\r
+{\r
+  UINTN Index;\r
+  while (*SupportedLanguages != 0) {\r
+    for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);\r
+    if ((AsciiStrnCmp(SupportedLanguages, TargetLanguage, Index) == 0) && (TargetLanguage[Index] == 0)) {\r
+      return EFI_SUCCESS;\r
+    }\r
+    SupportedLanguages += Index;\r
+    for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);\r
+  }\r
+\r
+  return EFI_UNSUPPORTED;\r
+}\r
+\r
 /**\r
   This function looks up a Unicode string in UnicodeStringTable.\r
 \r
@@ -800,24 +830,19 @@ LookupUnicodeString2 (
   // Make sure Language is in the set of Supported Languages\r
   //\r
   Found = FALSE;\r
-  while (*SupportedLanguages != 0) {\r
-    if (Iso639Language) {\r
+  if (Iso639Language) {\r
+    while (*SupportedLanguages != 0) {\r
       if (CompareIso639LanguageCode (Language, SupportedLanguages)) {\r
         Found = TRUE;\r
         break;\r
       }\r
       SupportedLanguages += 3;\r
-    } else {\r
-      for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);\r
-      if ((AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) && (Language[Index] == 0)) {\r
-        Found = TRUE;\r
-        break;\r
-      }\r
-      SupportedLanguages += Index;\r
-      for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);\r
     }\r
+  } else {\r
+    Found = !IsLanguageSupported(Language, SupportedLanguages);\r
   }\r
 \r
+\r
   //\r
   // If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED\r
   //\r
@@ -1099,24 +1124,17 @@ AddUnicodeString2 (
   // Make sure Language is a member of SupportedLanguages\r
   //\r
   Found = FALSE;\r
-  while (*SupportedLanguages != 0) {\r
-    if (Iso639Language) {\r
+  if (Iso639Language) {\r
+    while (*SupportedLanguages != 0) {\r
       if (CompareIso639LanguageCode (Language, SupportedLanguages)) {\r
         Found = TRUE;\r
         break;\r
       }\r
       SupportedLanguages += 3;\r
-    } else {\r
-      for (Index = 0; SupportedLanguages[Index] != 0 && SupportedLanguages[Index] != ';'; Index++);\r
-      if (AsciiStrnCmp(SupportedLanguages, Language, Index) == 0) {\r
-        Found = TRUE;\r
-        break;\r
-      }\r
-      SupportedLanguages += Index;\r
-      for (; *SupportedLanguages != 0 && *SupportedLanguages == ';'; SupportedLanguages++);\r
     }\r
+  } else {\r
+    Found = !IsLanguageSupported(Language, SupportedLanguages);\r
   }\r
-\r
   //\r
   // If Language is not a member of SupportedLanguages, then return EFI_UNSUPPORTED\r
   //\r