ASSERT (StringSrc != NULL && BufferSize != NULL);\r
\r
StringSize = AsciiStrSize (StringSrc) * 2;\r
- if (*BufferSize < StringSize) {\r
+ if (*BufferSize < StringSize || StringDest == NULL) {\r
*BufferSize = StringSize;\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
Matched = TRUE;\r
break;\r
}\r
}\r
}\r
\r
+ //\r
+ // Trigger any registered notification function\r
+ //\r
+ if (!Matched) { \r
+ return InvokeRegisteredFunction (\r
+ Private,\r
+ EFI_HII_DATABASE_NOTIFY_NEW_PACK,\r
+ (VOID *) StringPackage,\r
+ EFI_HII_PACKAGE_STRINGS,\r
+ PackageList\r
+ );\r
+ }\r
+\r
return EFI_SUCCESS;\r
}\r
\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
Status = GetStringWorker (Private, StringPackage, StringId, String, StringSize, StringFontInfo);\r
if (Status != EFI_NOT_FOUND) {\r
return Status;\r
Link = Link->ForwardLink\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) Language)) {\r
OldPackageLen = StringPackage->StringPkgHdr->Header.Length;\r
Status = SetStringWorker (\r
Private,\r
) {\r
StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
ResultSize += AsciiStrSize (StringPackage->StringPkgHdr->Language);\r
- if (ResultSize < *LanguagesSize) {\r
+ if (ResultSize <= *LanguagesSize) {\r
AsciiStrCpy (Languages, StringPackage->StringPkgHdr->Language);\r
Languages += AsciiStrSize (StringPackage->StringPkgHdr->Language);\r
*(Languages - 1) = L';';\r
Link1 = Link1->ForwardLink\r
) {\r
StringPackage = CR (Link1, HII_STRING_PACKAGE_INSTANCE, StringEntry, HII_STRING_PACKAGE_SIGNATURE);\r
- if (R8_EfiLibCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) {\r
+ if (HiiCompareLanguage (StringPackage->StringPkgHdr->Language, (CHAR8 *) FirstLanguage)) {\r
Languages = StringPackage->StringPkgHdr->Language;\r
//\r
// Language is a series of ';' terminated strings, first one is primary\r
return EFI_INVALID_LANGUAGE;\r
}\r
\r
+/**\r
+ Compare whether two names of languages are identical.\r
+\r
+ @param Language1 Name of language 1\r
+ @param Language2 Name of language 2\r
+\r
+ @retval TRUE same\r
+ @retval FALSE not same\r
+\r
+**/\r
+BOOLEAN\r
+HiiCompareLanguage (\r
+ IN CHAR8 *Language1,\r
+ IN CHAR8 *Language2\r
+ )\r
+{\r
+ //\r
+ // Porting Guide:\r
+ // This library interface is simply obsolete.\r
+ // Include the source code to user code.\r
+ //\r
+ UINTN Index;\r
+\r
+ for (Index = 0; (Language1[Index] != 0) && (Language2[Index] != 0); Index++) {\r
+ if (Language1[Index] != Language2[Index]) {\r
+ return FALSE;\r
+ }\r
+ }\r
+\r
+ if (((Language1[Index] == 0) && (Language2[Index] == 0)) || \r
+ ((Language1[Index] == 0) && (Language2[Index] != ';')) ||\r
+ ((Language1[Index] == ';') && (Language2[Index] != 0)) ||\r
+ ((Language1[Index] == ';') && (Language2[Index] != ';'))) {\r
+ return TRUE;\r
+ }\r
+\r
+ return FALSE;\r
+}\r