]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/HiiLib/HiiLanguage.c
1) Cleanup HiiLib, IfrSupportLib.
[mirror_edk2.git] / MdePkg / Library / HiiLib / HiiLanguage.c
1 /** @file
2 Language related HII Library implementation.
3
4 Copyright (c) 2006, Intel Corporation<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15
16 #include "InternalHiiLib.h"
17
18 EFI_STATUS
19 EFIAPI
20 HiiLibGetCurrentLanguage (
21 OUT CHAR8 *Lang
22 )
23 {
24 EFI_STATUS Status;
25 UINTN Size;
26
27 ASSERT (Lang != NULL);
28
29 //
30 // Get current language setting
31 //
32 Size = RFC_3066_ENTRY_SIZE;
33 Status = gRT->GetVariable (
34 L"PlatformLang",
35 &gEfiGlobalVariableGuid,
36 NULL,
37 &Size,
38 Lang
39 );
40
41 if (EFI_ERROR (Status)) {
42 AsciiStrCpy (Lang, (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang));
43 }
44
45 return Status;
46 }
47
48
49 VOID
50 EFIAPI
51 HiiLibGetNextLanguage (
52 IN OUT CHAR8 **LangCode,
53 OUT CHAR8 *Lang
54 )
55 {
56 UINTN Index;
57 CHAR8 *StringPtr;
58
59 ASSERT (LangCode != NULL);
60 ASSERT (Lang != NULL);
61
62 Index = 0;
63 StringPtr = *LangCode;
64 while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {
65 Index++;
66 }
67
68 CopyMem (Lang, StringPtr, Index);
69 Lang[Index] = 0;
70
71 if (StringPtr[Index] == ';') {
72 Index++;
73 }
74 *LangCode = StringPtr + Index;
75 }
76
77
78 CHAR8 *
79 EFIAPI
80 HiiLibGetSupportedLanguages (
81 IN EFI_HII_HANDLE HiiHandle
82 )
83 {
84 EFI_STATUS Status;
85 UINTN BufferSize;
86 CHAR8 *LanguageString;
87
88 ASSERT (HiiHandle != NULL);
89 ASSERT (IsHiiHandleRegistered (HiiHandle));
90 //
91 // Collect current supported Languages for given HII handle
92 //
93 BufferSize = 0x1000;
94 LanguageString = AllocatePool (BufferSize);
95 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
96
97 if (Status == EFI_BUFFER_TOO_SMALL) {
98 gBS->FreePool (LanguageString);
99 LanguageString = AllocatePool (BufferSize);
100 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
101 }
102
103 if (EFI_ERROR (Status)) {
104 LanguageString = NULL;
105 }
106
107 return LanguageString;
108 }
109
110
111 UINT16
112 EFIAPI
113 HiiLibGetSupportedLanguageNumber (
114 IN EFI_HII_HANDLE HiiHandle
115 )
116 {
117 CHAR8 *Languages;
118 CHAR8 *LanguageString;
119 UINT16 LangNumber;
120 CHAR8 Lang[RFC_3066_ENTRY_SIZE];
121
122 Languages = HiiLibGetSupportedLanguages (HiiHandle);
123 if (Languages == NULL) {
124 return 0;
125 }
126
127 LangNumber = 0;
128 LanguageString = Languages;
129 while (*LanguageString != 0) {
130 HiiLibGetNextLanguage (&LanguageString, Lang);
131 LangNumber++;
132 }
133 gBS->FreePool (Languages);
134
135 return LangNumber;
136 }