]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/HiiLib/HiiLanguage.c
Merged in the following trackers from EDK:
[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 = AllocateZeroPool (BufferSize);
95 if (LanguageString == NULL) {
96 return NULL;
97 }
98
99 LocateHiiProtocols ();
100
101 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
102
103 if (Status == EFI_BUFFER_TOO_SMALL) {
104 gBS->FreePool (LanguageString);
105 LanguageString = AllocateZeroPool (BufferSize);
106 if (LanguageString == NULL) {
107 return NULL;
108 }
109
110 Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
111 }
112
113 if (EFI_ERROR (Status)) {
114 LanguageString = NULL;
115 }
116
117 return LanguageString;
118 }
119
120
121 UINT16
122 EFIAPI
123 HiiLibGetSupportedLanguageNumber (
124 IN EFI_HII_HANDLE HiiHandle
125 )
126 {
127 CHAR8 *Languages;
128 CHAR8 *LanguageString;
129 UINT16 LangNumber;
130 CHAR8 Lang[RFC_3066_ENTRY_SIZE];
131
132 Languages = HiiLibGetSupportedLanguages (HiiHandle);
133 if (Languages == NULL) {
134 return 0;
135 }
136
137 LangNumber = 0;
138 LanguageString = Languages;
139 while (*LanguageString != 0) {
140 HiiLibGetNextLanguage (&LanguageString, Lang);
141 LangNumber++;
142 }
143 gBS->FreePool (Languages);
144
145 return LangNumber;
146 }
147
148 CHAR8 *
149 EFIAPI
150 HiiLibGetSupportedSecondaryLanguages (
151 IN EFI_HII_HANDLE HiiHandle,
152 IN CONST CHAR8 *FirstLanguage
153 )
154 {
155 EFI_STATUS Status;
156 UINTN BufferSize;
157 CHAR8 *LanguageString;
158
159 ASSERT (HiiHandle != NULL);
160 ASSERT (IsHiiHandleRegistered (HiiHandle));
161 //
162 // Collect current supported 2nd Languages for given HII handle
163 //
164 BufferSize = 0x1000;
165 LanguageString = AllocateZeroPool (BufferSize);
166 if (LanguageString == NULL) {
167 return NULL;
168 }
169
170 LocateHiiProtocols ();
171
172 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
173
174 if (Status == EFI_BUFFER_TOO_SMALL) {
175 gBS->FreePool (LanguageString);
176 LanguageString = AllocateZeroPool (BufferSize);
177 if (LanguageString == NULL) {
178 return NULL;
179 }
180
181 Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
182 }
183
184 if (EFI_ERROR (Status)) {
185 LanguageString = NULL;
186 }
187
188 return LanguageString;
189 }
190
191