2019-09-03 11:58:42 +02:00
|
|
|
/** @file
|
|
|
|
Language related HII Library implementation.
|
|
|
|
|
|
|
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
|
|
#include "InternalHiiLib.h"
|
|
|
|
|
|
|
|
/**
|
|
|
|
Retrieves a pointer to the a Null-terminated ASCII string containing the list
|
|
|
|
of languages that an HII handle in the HII Database supports. The returned
|
|
|
|
string is allocated using AllocatePool(). The caller is responsible for freeing
|
|
|
|
the returned string using FreePool(). The format of the returned string follows
|
|
|
|
the language format assumed the HII Database.
|
|
|
|
|
|
|
|
If HiiHandle is NULL, then ASSERT().
|
|
|
|
|
|
|
|
@param[in] HiiHandle A handle that was previously registered in the HII Database.
|
|
|
|
|
|
|
|
@retval NULL HiiHandle is not registered in the HII database
|
|
|
|
@retval NULL There are not enough resources available to retrieve the supported
|
|
|
|
languages.
|
|
|
|
@retval NULL The list of supported languages could not be retrieved.
|
|
|
|
@retval Other A pointer to the Null-terminated ASCII string of supported languages.
|
|
|
|
|
|
|
|
**/
|
|
|
|
CHAR8 *
|
|
|
|
EFIAPI
|
|
|
|
HiiGetSupportedLanguages (
|
|
|
|
IN EFI_HII_HANDLE HiiHandle
|
|
|
|
)
|
|
|
|
{
|
|
|
|
EFI_STATUS Status;
|
|
|
|
UINTN LanguageSize;
|
|
|
|
CHAR8 TempSupportedLanguages;
|
|
|
|
CHAR8 *SupportedLanguages;
|
|
|
|
|
|
|
|
ASSERT (HiiHandle != NULL);
|
|
|
|
|
|
|
|
//
|
|
|
|
// Retrieve the size required for the supported languages buffer.
|
|
|
|
//
|
|
|
|
LanguageSize = 0;
|
|
|
|
Status = gHiiString->GetLanguages (gHiiString, HiiHandle, &TempSupportedLanguages, &LanguageSize);
|
|
|
|
|
|
|
|
//
|
|
|
|
// If GetLanguages() returns EFI_SUCCESS for a zero size,
|
|
|
|
// then there are no supported languages registered for HiiHandle. If GetLanguages()
|
|
|
|
// returns an error other than EFI_BUFFER_TOO_SMALL, then HiiHandle is not present
|
|
|
|
// in the HII Database
|
|
|
|
//
|
|
|
|
if (Status != EFI_BUFFER_TOO_SMALL) {
|
|
|
|
//
|
|
|
|
// Return NULL if the size can not be retrieved, or if HiiHandle is not in the HII Database
|
|
|
|
//
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Allocate the supported languages buffer.
|
|
|
|
//
|
2020-04-28 12:49:24 +02:00
|
|
|
SupportedLanguages = AllocateZeroPool(LanguageSize);
|
2019-09-03 11:58:42 +02:00
|
|
|
if (SupportedLanguages == NULL) {
|
|
|
|
//
|
|
|
|
// Return NULL if allocation fails.
|
|
|
|
//
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Retrieve the supported languages string
|
|
|
|
//
|
|
|
|
Status = gHiiString->GetLanguages (gHiiString, HiiHandle, SupportedLanguages, &LanguageSize);
|
2020-04-23 11:08:10 +02:00
|
|
|
if (EFI_ERROR(Status)) {
|
2019-09-03 11:58:42 +02:00
|
|
|
//
|
|
|
|
// Free the buffer and return NULL if the supported languages can not be retrieved.
|
|
|
|
//
|
2020-04-23 11:08:10 +02:00
|
|
|
FreePool(SupportedLanguages);
|
2019-09-03 11:58:42 +02:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Return the Null-terminated ASCII string of supported languages
|
|
|
|
//
|
|
|
|
return SupportedLanguages;
|
|
|
|
}
|
|
|
|
|