Reviewed-by: Jaben Carsey <[email protected]>
> -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Marvin Häuser > Sent: Saturday, May 05, 2018 5:11 PM > To: [email protected] > Cc: Carsey, Jaben <[email protected]>; Ni, Ruiyu <[email protected]> > Subject: [edk2] [PATCH] ShellPkg/UefiShellLevel2CommandsLib: Fix ls on > entirely empty directories. > Importance: High > > Currently, when 'ls' is run on an entirely empty directory (this > includes not having '.' and '..'), the output is always 'File not > found'. For when not filtering its children, this patch rather > displays the usual header and footer. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Marvin Haeuser <[email protected]> > --- > ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c | 33 > +++++++++++++++++--- > 1 file changed, 28 insertions(+), 5 deletions(-) > > diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c > b/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c > index 7d2e15f5206b..324dcb6091c8 100644 > --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c > +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Ls.c > @@ -423,6 +423,8 @@ FileTimeToLocalTime ( > @param[in] Found Set to TRUE, if anyone were found. > @param[in] Count The count of bits enabled in Attribs. > @param[in] TimeZone The current time zone offset. > + @param[in] ListUnfiltered TRUE to request listing the directory contents > + unfiltered. > > @retval SHELL_SUCCESS the printing was sucessful. > **/ > @@ -435,7 +437,8 @@ PrintLsOutput( > IN CONST CHAR16 *SearchString, > IN BOOLEAN *Found, > IN CONST UINTN Count, > - IN CONST INT16 TimeZone > + IN CONST INT16 TimeZone, > + IN CONST BOOLEAN ListUnfiltered > ) > { > EFI_STATUS Status; > @@ -561,7 +564,7 @@ PrintLsOutput( > HeaderPrinted = TRUE; > } > > - if (!Sfo && ShellStatus != SHELL_ABORTED) { > + if (!Sfo && ShellStatus != SHELL_ABORTED && HeaderPrinted) { > PrintNonSfoFooter(FileCount, FileSize, DirCount); > } > } > @@ -608,7 +611,8 @@ PrintLsOutput( > SearchString, > &FoundOne, > Count, > - TimeZone); > + TimeZone, > + FALSE); > > // > // Since it's running recursively, we have to break immediately > when > returned SHELL_ABORTED > @@ -625,7 +629,21 @@ PrintLsOutput( > ShellCloseFileMetaArg(&ListHead); > > if (Found == NULL && !FoundOne) { > - return (SHELL_NOT_FOUND); > + if (ListUnfiltered) { > + // > + // When running "ls" without any filtering request, avoid outputing > + // "File not found" when the directory is entirely empty, but print > + // header and footer stating "0 File(s), 0 Dir(s)". > + // > + if (!Sfo) { > + PrintNonSfoHeader (RootPath); > + if (ShellStatus != SHELL_ABORTED) { > + PrintNonSfoFooter (FileCount, FileSize, DirCount); > + } > + } > + } else { > + return (SHELL_NOT_FOUND); > + } > } > > if (Found != NULL) { > @@ -668,6 +686,7 @@ ShellCommandRunLs ( > UINTN Size; > EFI_TIME TheTime; > CHAR16 *SearchString; > + BOOLEAN ListUnfiltered; > > Size = 0; > FullPath = NULL; > @@ -679,6 +698,7 @@ ShellCommandRunLs ( > SearchString = NULL; > CurDir = NULL; > Count = 0; > + ListUnfiltered = FALSE; > > // > // initialize the shell lib (we must be in non-auto-init...) > @@ -774,6 +794,7 @@ ShellCommandRunLs ( > ShellStatus = SHELL_NOT_FOUND; > ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_CWD), > gShellLevel2HiiHandle, L"ls"); > } > + ListUnfiltered = TRUE; > // > // Copy to the 2 strings for starting path and file search string > // > @@ -814,6 +835,7 @@ ShellCommandRunLs ( > // > // is listing ends with a directory, then we list all files in > that directory > // > + ListUnfiltered = TRUE; > StrnCatGrow(&SearchString, NULL, L"*", 0); > } else { > // > @@ -845,7 +867,8 @@ ShellCommandRunLs ( > SearchString, > NULL, > Count, > - TheTime.TimeZone > + TheTime.TimeZone, > + ListUnfiltered > ); > if (ShellStatus == SHELL_NOT_FOUND) { > ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN > (STR_LS_FILE_NOT_FOUND), gShellLevel2HiiHandle, L"ls", FullPath); > -- > 2.17.0.windows.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

