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

Reply via email to