mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 11:13:53 +01:00 
			
		
		
		
	ShellPkg: Expand special output file to include "NULL" and case insensitive
As per ECR 1349 change in UEFI Shell Specification 2.2, expanding a special output file name to include "NULL". Previously it only supported "NUL" as a special output file and it was case sensitive. With this change both "NUL" and "NULL" are special output file and checked as case insensitive. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Tapan Shah <tapandshah@hpe.com> Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
This commit is contained in:
		
							parent
							
								
									38707d76fc
								
							
						
					
					
						commit
						583448b441
					
				| @ -2,6 +2,7 @@ | |||||||
|   Member functions of EFI_SHELL_PARAMETERS_PROTOCOL and functions for creation, |   Member functions of EFI_SHELL_PARAMETERS_PROTOCOL and functions for creation, | ||||||
|   manipulation, and initialization of EFI_SHELL_PARAMETERS_PROTOCOL. |   manipulation, and initialization of EFI_SHELL_PARAMETERS_PROTOCOL. | ||||||
| 
 | 
 | ||||||
|  |   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> | ||||||
|   Copyright (C) 2014, Red Hat, Inc. |   Copyright (C) 2014, Red Hat, Inc. | ||||||
|   (C) Copyright 2013 Hewlett-Packard Development Company, L.P.<BR> |   (C) Copyright 2013 Hewlett-Packard Development Company, L.P.<BR> | ||||||
|   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR> |   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR> | ||||||
| @ -1174,7 +1175,7 @@ UpdateStdInStdOutStdErr( | |||||||
|         if (TempHandle == NULL) { |         if (TempHandle == NULL) { | ||||||
|           Status = EFI_INVALID_PARAMETER; |           Status = EFI_INVALID_PARAMETER; | ||||||
|         } else { |         } else { | ||||||
|           if (StrStr(StdOutFileName, L"NUL")==StdOutFileName) { |           if (gUnicodeCollation->MetaiMatch (gUnicodeCollation, StdOutFileName, L"NUL")) { | ||||||
|             //no-op
 |             //no-op
 | ||||||
|           } else if (!OutAppend && OutUnicode && !EFI_ERROR(Status)) { |           } else if (!OutAppend && OutUnicode && !EFI_ERROR(Status)) { | ||||||
|             Status = WriteFileTag (TempHandle); |             Status = WriteFileTag (TempHandle); | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ | |||||||
|   manipulation, and initialization of EFI_SHELL_PROTOCOL. |   manipulation, and initialization of EFI_SHELL_PROTOCOL. | ||||||
| 
 | 
 | ||||||
|   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR> |   (C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR> | ||||||
|  |   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> | ||||||
|   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR> |   Copyright (c) 2009 - 2016, Intel Corporation. All rights reserved.<BR> | ||||||
|   This program and the accompanying materials |   This program and the accompanying materials | ||||||
|   are licensed and made available under the terms and conditions of the BSD License |   are licensed and made available under the terms and conditions of the BSD License | ||||||
| @ -1287,9 +1288,10 @@ EfiShellOpenFileByName( | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   //
 |   //
 | ||||||
|   // Is this for NUL file
 |   // Is this for NUL / NULL file
 | ||||||
|   //
 |   //
 | ||||||
|   if (StrCmp(FileName, L"NUL") == 0) { |   if ((gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16*)FileName, L"NUL") == 0) || | ||||||
|  |       (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16*)FileName, L"NULL") == 0)) { | ||||||
|     *FileHandle = &FileInterfaceNulFile; |     *FileHandle = &FileInterfaceNulFile; | ||||||
|     return (EFI_SUCCESS); |     return (EFI_SUCCESS); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| /** @file
 | /** @file
 | ||||||
|   Provides interface to shell functionality for shell commands and applications. |   Provides interface to shell functionality for shell commands and applications. | ||||||
| 
 | 
 | ||||||
|  |   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> | ||||||
|   Copyright 2016 Dell Inc. |   Copyright 2016 Dell Inc. | ||||||
|   Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> |   Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR> | ||||||
|   This program and the accompanying materials |   This program and the accompanying materials | ||||||
| @ -36,6 +37,7 @@ EFI_SHELL_PROTOCOL            *gEfiShellProtocol; | |||||||
| EFI_SHELL_PARAMETERS_PROTOCOL *gEfiShellParametersProtocol; | EFI_SHELL_PARAMETERS_PROTOCOL *gEfiShellParametersProtocol; | ||||||
| EFI_HANDLE                    mEfiShellEnvironment2Handle; | EFI_HANDLE                    mEfiShellEnvironment2Handle; | ||||||
| FILE_HANDLE_FUNCTION_MAP      FileFunctionMap; | FILE_HANDLE_FUNCTION_MAP      FileFunctionMap; | ||||||
|  | EFI_UNICODE_COLLATION_PROTOCOL  *mUnicodeCollationProtocol; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|   Check if a Unicode character is a hexadecimal character. |   Check if a Unicode character is a hexadecimal character. | ||||||
| @ -290,12 +292,19 @@ ShellLibConstructor ( | |||||||
|   IN EFI_SYSTEM_TABLE  *SystemTable |   IN EFI_SYSTEM_TABLE  *SystemTable | ||||||
|   ) |   ) | ||||||
| { | { | ||||||
|  |   EFI_STATUS  Status; | ||||||
|  | 
 | ||||||
|   mEfiShellEnvironment2       = NULL; |   mEfiShellEnvironment2       = NULL; | ||||||
|   gEfiShellProtocol           = NULL; |   gEfiShellProtocol           = NULL; | ||||||
|   gEfiShellParametersProtocol = NULL; |   gEfiShellParametersProtocol = NULL; | ||||||
|   mEfiShellInterface          = NULL; |   mEfiShellInterface          = NULL; | ||||||
|   mEfiShellEnvironment2Handle = NULL; |   mEfiShellEnvironment2Handle = NULL; | ||||||
| 
 | 
 | ||||||
|  |   if (mUnicodeCollationProtocol == NULL) { | ||||||
|  |     Status = gBS->LocateProtocol (&gEfiUnicodeCollation2ProtocolGuid, NULL, (VOID**)&mUnicodeCollationProtocol); | ||||||
|  |     ASSERT_EFI_ERROR (Status); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   //
 |   //
 | ||||||
|   // verify that auto initialize is not set false
 |   // verify that auto initialize is not set false
 | ||||||
|   //
 |   //
 | ||||||
| @ -720,7 +729,10 @@ ShellOpenFileByName( | |||||||
|     Status = gEfiShellProtocol->OpenFileByName(FileName, |     Status = gEfiShellProtocol->OpenFileByName(FileName, | ||||||
|                                                FileHandle, |                                                FileHandle, | ||||||
|                                                OpenMode); |                                                OpenMode); | ||||||
|     if (StrCmp(FileName, L"NUL") != 0 && !EFI_ERROR(Status) && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)){ | 
 | ||||||
|  |     if ((mUnicodeCollationProtocol->StriColl (mUnicodeCollationProtocol, (CHAR16*)FileName, L"NUL") != 0) && | ||||||
|  |         (mUnicodeCollationProtocol->StriColl (mUnicodeCollationProtocol, (CHAR16*)FileName, L"NULL") != 0) && | ||||||
|  |          !EFI_ERROR(Status) && ((OpenMode & EFI_FILE_MODE_CREATE) != 0)){ | ||||||
|       FileInfo = FileFunctionMap.GetFileInfo(*FileHandle); |       FileInfo = FileFunctionMap.GetFileInfo(*FileHandle); | ||||||
|       ASSERT(FileInfo != NULL); |       ASSERT(FileInfo != NULL); | ||||||
|       FileInfo->Attribute = Attributes; |       FileInfo->Attribute = Attributes; | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| /** @file
 | /** @file
 | ||||||
|   Provides interface to shell functionality for shell commands and applications. |   Provides interface to shell functionality for shell commands and applications. | ||||||
| 
 | 
 | ||||||
|  |   (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> | ||||||
|   Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> |   Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> | ||||||
|   This program and the accompanying materials |   This program and the accompanying materials | ||||||
|   are licensed and made available under the terms and conditions of the BSD License |   are licensed and made available under the terms and conditions of the BSD License | ||||||
| @ -25,6 +26,7 @@ | |||||||
| #include <Protocol/EfiShellEnvironment2.h> | #include <Protocol/EfiShellEnvironment2.h> | ||||||
| #include <Protocol/EfiShell.h> | #include <Protocol/EfiShell.h> | ||||||
| #include <Protocol/EfiShellParameters.h> | #include <Protocol/EfiShellParameters.h> | ||||||
|  | #include <Protocol/UnicodeCollation.h> | ||||||
| 
 | 
 | ||||||
| #include <Library/UefiBootServicesTableLib.h> | #include <Library/UefiBootServicesTableLib.h> | ||||||
| #include <Library/BaseLib.h> | #include <Library/BaseLib.h> | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| ##  @file | ##  @file | ||||||
| # Provides interface to shell functionality for shell commands and applications. | # Provides interface to shell functionality for shell commands and applications. | ||||||
| # | # | ||||||
|  | # (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> | ||||||
| # Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved. <BR> | # Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved. <BR> | ||||||
| # | # | ||||||
| #  This program and the accompanying materials | #  This program and the accompanying materials | ||||||
| @ -51,6 +52,7 @@ | |||||||
| 
 | 
 | ||||||
| [Protocols] | [Protocols] | ||||||
|   gEfiSimpleFileSystemProtocolGuid              ## SOMETIMES_CONSUMES |   gEfiSimpleFileSystemProtocolGuid              ## SOMETIMES_CONSUMES | ||||||
|  |   gEfiUnicodeCollation2ProtocolGuid             ## CONSUMES | ||||||
| 
 | 
 | ||||||
|   # shell 2.0 |   # shell 2.0 | ||||||
|   gEfiShellProtocolGuid                         ## SOMETIMES_CONSUMES |   gEfiShellProtocolGuid                         ## SOMETIMES_CONSUMES | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user