Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1998 Intel Corporation
Module Name:
Abstract:
Revision History
--*/
#include "lib.h"
VOID InitializeLib ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) /*++
Routine Description:
Initializes EFI library for use Arguments:
Firmware's EFI system table Returns:
None
--*/ { EFI_LOADED_IMAGE *LoadedImage; EFI_STATUS Status; CHAR8 *LangCode;
if (!LibInitialized) { LibInitialized = TRUE; LibFwInstance = FALSE;
/*
* Set up global pointer to the system table, boot services table, * and runtime services table */
ST = SystemTable; BS = SystemTable->BootServices; RT = SystemTable->RuntimeServices; /* ASSERT (CheckCrc(0, &ST->Hdr));
* ASSERT (CheckCrc(0, &BS->Hdr)); * ASSERT (CheckCrc(0, &RT->Hdr)); */
/*
* Initialize pool allocation type */
if (ImageHandle) { Status = BS->HandleProtocol ( ImageHandle, &LoadedImageProtocol, (VOID*)&LoadedImage );
if (!EFI_ERROR(Status)) { PoolAllocationType = LoadedImage->ImageDataType; } }
/*
* Initialize Guid table */
InitializeGuid();
InitializeLibPlatform(ImageHandle,SystemTable); }
/*
* */
if (ImageHandle && UnicodeInterface == &LibStubUnicodeInterface) { LangCode = LibGetVariable (VarLanguage, &EfiGlobalVariable); InitializeUnicodeSupport (LangCode); if (LangCode) { FreePool (LangCode); } } }
VOID InitializeUnicodeSupport ( CHAR8 *LangCode ) { EFI_UNICODE_COLLATION_INTERFACE *Ui; EFI_STATUS Status; CHAR8 *Languages; UINTN Index, Position, Length; UINTN NoHandles; EFI_HANDLE *Handles;
/*
* If we don't know it, lookup the current language code */
LibLocateHandle (ByProtocol, &UnicodeCollationProtocol, NULL, &NoHandles, &Handles); if (!LangCode || !NoHandles) { goto Done; }
/*
* Check all driver's for a matching language code */
for (Index=0; Index < NoHandles; Index++) { Status = BS->HandleProtocol (Handles[Index], &UnicodeCollationProtocol, (VOID*)&Ui); if (EFI_ERROR(Status)) { continue; }
/*
* Check for a matching language code */
Languages = Ui->SupportedLanguages; Length = strlena(Languages); for (Position=0; Position < Length; Position += ISO_639_2_ENTRY_SIZE) {
/*
* If this code matches, use this driver */
if (CompareMem (Languages+Position, LangCode, ISO_639_2_ENTRY_SIZE) == 0) { UnicodeInterface = Ui; goto Done; } } }
Done: /*
* Cleanup */
if (Handles) { FreePool (Handles); } }
|