Revision: 14786
http://sourceforge.net/p/edk2/code/14786
Author: jcarsey
Date: 2013-10-18 18:53:16 +0000 (Fri, 18 Oct 2013)
Log Message:
-----------
ShellPkg: Fixes for the ?\226?\128?\152ls?\226?\128?\153 command:
- Better output to print header and file not found text
- Fix file attribute argument handling
- Fix so path ending with ?\226?\128?\152\?\226?\128?\153 or
?\226?\128?\152*?\226?\128?\153 is handled correctly
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chris Phillips <[email protected]>
reviewed-by: Jaben Carsey <[email protected]>
Modified Paths:
--------------
trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c
trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni
Modified: trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c
===================================================================
--- trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c 2013-10-18
18:11:52 UTC (rev 14785)
+++ trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c 2013-10-18
18:53:16 UTC (rev 14786)
@@ -1,6 +1,7 @@
/** @file
Main file for ls shell level 2 function.
+ Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
@@ -72,6 +73,26 @@
PathCleanUpDirectories(CorrectedPath);
+ if (!Sfo) {
+ //
+ // get directory name from path...
+ //
+ DirectoryName = GetFullyQualifiedPath(CorrectedPath);
+
+ //
+ // print header
+ //
+ ShellPrintHiiEx (
+ 0,
+ gST->ConOut->Mode->CursorRow,
+ NULL,
+ STRING_TOKEN (STR_LS_HEADER_LINE1),
+ gShellLevel2HiiHandle,
+ DirectoryName
+ );
+ FreePool(DirectoryName);
+ }
+
Status = ShellOpenFileMetaArg((CHAR16*)CorrectedPath, EFI_FILE_MODE_READ,
&ListHead);
if (EFI_ERROR(Status)) {
SHELL_FREE_NON_NULL(CorrectedPath);
@@ -192,25 +213,6 @@
}
}
- if (!Sfo) {
- //
- // get directory name from path...
- //
- DirectoryName = GetFullyQualifiedPath(CorrectedPath);
-
- //
- // print header
- //
- ShellPrintHiiEx (
- 0,
- gST->ConOut->Mode->CursorRow,
- NULL,
- STRING_TOKEN (STR_LS_HEADER_LINE1),
- gShellLevel2HiiHandle,
- DirectoryName
- );
- FreePool(DirectoryName);
- }
for ( Node = (EFI_SHELL_FILE_INFO *)GetFirstNode(&ListHead->Link)
; !IsNull(&ListHead->Link, &Node->Link)
; Node = (EFI_SHELL_FILE_INFO *)GetNextNode(&ListHead->Link, &Node->Link)
@@ -230,21 +232,17 @@
){
continue;
}
- } else if (Attribs != EFI_FILE_VALID_ATTR) {
- if (Count == 1) {
- //
- // the bit must match
- //
- if ( (Node->Info->Attribute & Attribs) != Attribs) {
- continue;
- }
- } else {
- //
- // exact match on all bits
- //
- if ( (Node->Info->Attribute|EFI_FILE_ARCHIVE) !=
(Attribs|EFI_FILE_ARCHIVE)) {
- continue;
- }
+ } else if ((Attribs != EFI_FILE_VALID_ATTR) ||
+ (Count == 5)) {
+ //
+ // Only matches the bits which "Attribs" contains, not
+ // all files/directories with any of the bits.
+ // Count == 5 is used to tell the difference between a user
+ // specifying all bits (EX: -arhsda) and just specifying
+ // -a (means display all files with any attribute).
+ //
+ if ( (Node->Info->Attribute & Attribs) != Attribs) {
+ continue;
}
}
@@ -543,7 +541,21 @@
ASSERT((FullPath == NULL && Size == 0) || (FullPath != NULL));
StrnCatGrow(&FullPath, &Size, PathName, 0);
if (ShellIsDirectory(PathName) == EFI_SUCCESS) {
- StrnCatGrow(&FullPath, &Size, L"\\*", 0);
+ if (PathName[StrLen (PathName) - 1] == '\\') {
+ //
+ // For path ending with '\', just append '*'.
+ //
+ StrnCatGrow (&FullPath, &Size, L"*", 0);
+ } else if (PathName[StrLen (PathName) - 1] == '*') {
+ //
+ // For path ending with '*', do nothing.
+ //
+ } else {
+ //
+ // Otherwise, append '\*' to directory name.
+ //
+ StrnCatGrow (&FullPath, &Size, L"\\*", 0);
+ }
}
}
} else {
@@ -568,7 +580,7 @@
(INT16)(TheTime.TimeZone==EFI_UNSPECIFIED_TIMEZONE?0:TheTime.TimeZone)
);
if (ShellStatus == SHELL_NOT_FOUND) {
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_FILES),
gShellLevel2HiiHandle);
+ ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN
(STR_LS_FILE_NOT_FOUND), gShellLevel2HiiHandle);
} else if (ShellStatus == SHELL_INVALID_PARAMETER) {
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
gShellLevel2HiiHandle);
} else if (ShellStatus == SHELL_ABORTED) {
Modified:
trunk/edk2/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60135031&iu=/4140/ostg.clktrk
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits