diff options
author | Chris Phillips <chrisp@hp.com> | 2013-10-18 18:53:16 +0000 |
---|---|---|
committer | jcarsey <jcarsey@6f19259b-4bc3-4df7-8a09-765794883524> | 2013-10-18 18:53:16 +0000 |
commit | 58b7301ec9fc8df2b3955b1c04d304730538ed27 (patch) | |
tree | 3370d3a456ca9e7f216100f7f2914b589cda069d | |
parent | abbea36e3ecd725d50b950f0b4a73c3aebf3187f (diff) | |
download | edk2-58b7301ec9fc8df2b3955b1c04d304730538ed27.tar.gz edk2-58b7301ec9fc8df2b3955b1c04d304730538ed27.tar.bz2 edk2-58b7301ec9fc8df2b3955b1c04d304730538ed27.zip |
ShellPkg: Fixes for the ‘ls’ command:
- Better output to print header and file not found text
- Fix file attribute argument handling
- Fix so path ending with ‘\’ or ‘*’ is handled correctly
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Chris Phillips <chrisp@hp.com>
reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14786 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c | 84 | ||||
-rw-r--r-- | ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni | bin | 111572 -> 111846 bytes |
2 files changed, 48 insertions, 36 deletions
diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c index 55267a467a..4d0a1563e3 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c @@ -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 @@ PrintLsOutput( 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 @@ PrintLsOutput( }
}
- 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 @@ PrintLsOutput( ){
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 @@ ShellCommandRunLs ( 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 @@ ShellCommandRunLs ( (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) {
diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni Binary files differindex 08372d5ba3..f0991507c4 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.uni |