REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the FatPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			270 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Unicode Collation Support component that hides the trivial difference of Unicode Collation
 | 
						|
  and Unicode collation 2 Protocol.
 | 
						|
 | 
						|
  Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include "Fat.h"
 | 
						|
 | 
						|
EFI_UNICODE_COLLATION_PROTOCOL  *mUnicodeCollationInterface = NULL;
 | 
						|
 | 
						|
/**
 | 
						|
  Worker function to initialize Unicode Collation support.
 | 
						|
 | 
						|
  It tries to locate Unicode Collation (2) protocol and matches it with current
 | 
						|
  platform language code.
 | 
						|
 | 
						|
  @param  AgentHandle          The handle used to open Unicode Collation (2) protocol.
 | 
						|
  @param  ProtocolGuid         The pointer to Unicode Collation (2) protocol GUID.
 | 
						|
  @param  VariableName         The name of the RFC 4646 or ISO 639-2 language variable.
 | 
						|
  @param  DefaultLanguage      The default language in case the RFC 4646 or ISO 639-2 language is absent.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS          The Unicode Collation (2) protocol has been successfully located.
 | 
						|
  @retval Others               The Unicode Collation (2) protocol has not been located.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
InitializeUnicodeCollationSupportWorker (
 | 
						|
  IN EFI_HANDLE    AgentHandle,
 | 
						|
  IN EFI_GUID      *ProtocolGuid,
 | 
						|
  IN CONST CHAR16  *VariableName,
 | 
						|
  IN CONST CHAR8   *DefaultLanguage
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS                      ReturnStatus;
 | 
						|
  EFI_STATUS                      Status;
 | 
						|
  UINTN                           NumHandles;
 | 
						|
  UINTN                           Index;
 | 
						|
  EFI_HANDLE                      *Handles;
 | 
						|
  EFI_UNICODE_COLLATION_PROTOCOL  *Uci;
 | 
						|
  BOOLEAN                         Iso639Language;
 | 
						|
  CHAR8                           *Language;
 | 
						|
  CHAR8                           *BestLanguage;
 | 
						|
 | 
						|
  Status = gBS->LocateHandleBuffer (
 | 
						|
                  ByProtocol,
 | 
						|
                  ProtocolGuid,
 | 
						|
                  NULL,
 | 
						|
                  &NumHandles,
 | 
						|
                  &Handles
 | 
						|
                  );
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    return Status;
 | 
						|
  }
 | 
						|
 | 
						|
  Iso639Language = (BOOLEAN)(ProtocolGuid == &gEfiUnicodeCollationProtocolGuid);
 | 
						|
  GetEfiGlobalVariable2 (VariableName, (VOID **)&Language, NULL);
 | 
						|
 | 
						|
  ReturnStatus = EFI_UNSUPPORTED;
 | 
						|
  for (Index = 0; Index < NumHandles; Index++) {
 | 
						|
    //
 | 
						|
    // Open Unicode Collation Protocol
 | 
						|
    //
 | 
						|
    Status = gBS->OpenProtocol (
 | 
						|
                    Handles[Index],
 | 
						|
                    ProtocolGuid,
 | 
						|
                    (VOID **)&Uci,
 | 
						|
                    AgentHandle,
 | 
						|
                    NULL,
 | 
						|
                    EFI_OPEN_PROTOCOL_GET_PROTOCOL
 | 
						|
                    );
 | 
						|
    if (EFI_ERROR (Status)) {
 | 
						|
      continue;
 | 
						|
    }
 | 
						|
 | 
						|
    //
 | 
						|
    // Find the best matching matching language from the supported languages
 | 
						|
    // of Unicode Collation (2) protocol.
 | 
						|
    //
 | 
						|
    BestLanguage = GetBestLanguage (
 | 
						|
                     Uci->SupportedLanguages,
 | 
						|
                     Iso639Language,
 | 
						|
                     (Language == NULL) ? "" : Language,
 | 
						|
                     DefaultLanguage,
 | 
						|
                     NULL
 | 
						|
                     );
 | 
						|
    if (BestLanguage != NULL) {
 | 
						|
      FreePool (BestLanguage);
 | 
						|
      mUnicodeCollationInterface = Uci;
 | 
						|
      ReturnStatus               = EFI_SUCCESS;
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (Language != NULL) {
 | 
						|
    FreePool (Language);
 | 
						|
  }
 | 
						|
 | 
						|
  FreePool (Handles);
 | 
						|
 | 
						|
  return ReturnStatus;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize Unicode Collation support.
 | 
						|
 | 
						|
  It tries to locate Unicode Collation 2 protocol and matches it with current
 | 
						|
  platform language code. If for any reason the first attempt fails, it then tries to
 | 
						|
  use Unicode Collation Protocol.
 | 
						|
 | 
						|
  @param  AgentHandle          The handle used to open Unicode Collation (2) protocol.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS          The Unicode Collation (2) protocol has been successfully located.
 | 
						|
  @retval Others               The Unicode Collation (2) protocol has not been located.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
InitializeUnicodeCollationSupport (
 | 
						|
  IN EFI_HANDLE  AgentHandle
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS  Status;
 | 
						|
 | 
						|
  Status = EFI_UNSUPPORTED;
 | 
						|
 | 
						|
  //
 | 
						|
  // First try to use RFC 4646 Unicode Collation 2 Protocol.
 | 
						|
  //
 | 
						|
  Status = InitializeUnicodeCollationSupportWorker (
 | 
						|
             AgentHandle,
 | 
						|
             &gEfiUnicodeCollation2ProtocolGuid,
 | 
						|
             L"PlatformLang",
 | 
						|
             (CONST CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLang)
 | 
						|
             );
 | 
						|
  //
 | 
						|
  // If the attempt to use Unicode Collation 2 Protocol fails, then we fall back
 | 
						|
  // on the ISO 639-2 Unicode Collation Protocol.
 | 
						|
  //
 | 
						|
  if (EFI_ERROR (Status)) {
 | 
						|
    Status = InitializeUnicodeCollationSupportWorker (
 | 
						|
               AgentHandle,
 | 
						|
               &gEfiUnicodeCollationProtocolGuid,
 | 
						|
               L"Lang",
 | 
						|
               (CONST CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLang)
 | 
						|
               );
 | 
						|
  }
 | 
						|
 | 
						|
  return Status;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Performs a case-insensitive comparison of two Null-terminated Unicode strings.
 | 
						|
 | 
						|
  @param  S1                   A pointer to a Null-terminated Unicode string.
 | 
						|
  @param  S2                   A pointer to a Null-terminated Unicode string.
 | 
						|
 | 
						|
  @retval 0                    S1 is equivalent to S2.
 | 
						|
  @retval >0                   S1 is lexically greater than S2.
 | 
						|
  @retval <0                   S1 is lexically less than S2.
 | 
						|
**/
 | 
						|
INTN
 | 
						|
FatStriCmp (
 | 
						|
  IN CHAR16  *S1,
 | 
						|
  IN CHAR16  *S2
 | 
						|
  )
 | 
						|
{
 | 
						|
  ASSERT (StrSize (S1) != 0);
 | 
						|
  ASSERT (StrSize (S2) != 0);
 | 
						|
  ASSERT (mUnicodeCollationInterface != NULL);
 | 
						|
 | 
						|
  return mUnicodeCollationInterface->StriColl (
 | 
						|
                                       mUnicodeCollationInterface,
 | 
						|
                                       S1,
 | 
						|
                                       S2
 | 
						|
                                       );
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Uppercase a string.
 | 
						|
 | 
						|
  @param  String                   The string which will be upper-cased.
 | 
						|
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
FatStrUpr (
 | 
						|
  IN OUT CHAR16  *String
 | 
						|
  )
 | 
						|
{
 | 
						|
  ASSERT (StrSize (String) != 0);
 | 
						|
  ASSERT (mUnicodeCollationInterface != NULL);
 | 
						|
 | 
						|
  mUnicodeCollationInterface->StrUpr (mUnicodeCollationInterface, String);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Lowercase a string
 | 
						|
 | 
						|
  @param  String                   The string which will be lower-cased.
 | 
						|
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
FatStrLwr (
 | 
						|
  IN OUT CHAR16  *String
 | 
						|
  )
 | 
						|
{
 | 
						|
  ASSERT (StrSize (String) != 0);
 | 
						|
  ASSERT (mUnicodeCollationInterface != NULL);
 | 
						|
 | 
						|
  mUnicodeCollationInterface->StrLwr (mUnicodeCollationInterface, String);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Convert FAT string to unicode string.
 | 
						|
 | 
						|
  @param  FatSize               The size of FAT string.
 | 
						|
  @param  Fat                   The FAT string.
 | 
						|
  @param  String                The unicode string.
 | 
						|
 | 
						|
  @return None.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
FatFatToStr (
 | 
						|
  IN  UINTN   FatSize,
 | 
						|
  IN  CHAR8   *Fat,
 | 
						|
  OUT CHAR16  *String
 | 
						|
  )
 | 
						|
{
 | 
						|
  ASSERT (Fat != NULL);
 | 
						|
  ASSERT (String != NULL);
 | 
						|
  ASSERT (((UINTN)String & 0x01) == 0);
 | 
						|
  ASSERT (mUnicodeCollationInterface != NULL);
 | 
						|
 | 
						|
  mUnicodeCollationInterface->FatToStr (mUnicodeCollationInterface, FatSize, Fat, String);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Convert unicode string to Fat string.
 | 
						|
 | 
						|
  @param  String                The unicode string.
 | 
						|
  @param  FatSize               The size of the FAT string.
 | 
						|
  @param  Fat                   The FAT string.
 | 
						|
 | 
						|
  @retval TRUE                  Convert successfully.
 | 
						|
  @retval FALSE                 Convert error.
 | 
						|
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
FatStrToFat (
 | 
						|
  IN  CHAR16  *String,
 | 
						|
  IN  UINTN   FatSize,
 | 
						|
  OUT CHAR8   *Fat
 | 
						|
  )
 | 
						|
{
 | 
						|
  ASSERT (Fat != NULL);
 | 
						|
  ASSERT (StrSize (String) != 0);
 | 
						|
  ASSERT (mUnicodeCollationInterface != NULL);
 | 
						|
 | 
						|
  return mUnicodeCollationInterface->StrToFat (
 | 
						|
                                       mUnicodeCollationInterface,
 | 
						|
                                       String,
 | 
						|
                                       FatSize,
 | 
						|
                                       Fat
 | 
						|
                                       );
 | 
						|
}
 |