Hi Jim, Thanks for the quick fix! It works for me on ARM Juno R0, R1 and R2 and Versatile Express TC2.
On 10 February 2016 at 13:45, <[email protected]> wrote: > ShellPkg: ShellFileHandleReadLine must return UCS2 lines. > > An earlier change had this function returning the type of lines that were in > the file being read (ASCII or UCS2). The way it is used, UCS2 output is > expected, even when the file being read is ASCII. This change restores that > behavior and documents it. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jim Dailey ^^ your email address is missing from your sign-off, I think it's mandatory, but don't hold me to that. I haven't had chance to read and understand the code, but I can at least provide: Tested-by: Ryan Harkin <[email protected]> Thanks, Ryan. > --- > diff --git a/ShellPkg/Library/UefiShellLib/UefiShellLib.c > b/ShellPkg/Library/UefiShellLib/UefiShellLib.c > index 4b53c70..abff0d3 100644 > --- a/ShellPkg/Library/UefiShellLib/UefiShellLib.c > +++ b/ShellPkg/Library/UefiShellLib/UefiShellLib.c > @@ -4084,9 +4084,20 @@ ShellFileHandleReturnLine( > If the position upon start is 0, then the Ascii Boolean will be set. This > should be > maintained and not changed for all operations with the same file. > > + NOTE: LINES THAT ARE RETURNED BY THIS FUNCTION ARE UCS2, EVEN IF THE FILE > BEING READ > + IS IN ASCII FORMAT. > + > @param[in] Handle SHELL_FILE_HANDLE to read from. > - @param[in, out] Buffer The pointer to buffer to read into. > - @param[in, out] Size The pointer to number of bytes in Buffer. > + @param[in, out] Buffer The pointer to buffer to read into. If this > function > + returns EFI_SUCCESS, then on output Buffer > will > + contain a UCS2 string, even if the file > being > + read is ASCII. > + @param[in, out] Size On input, pointer to number of bytes in > Buffer. > + On output, unchanged unless Buffer is too > small > + to contain the next line of the file. In > that > + case Size is set to the number of bytes > needed > + to hold the next line of the file (as a UCS2 > + string, even if it is an ASCII file). > @param[in] Truncate If the buffer is large enough, this has no > effect. > If the buffer is is too small and Truncate > is TRUE, > the line will be truncated. > @@ -4165,43 +4176,27 @@ ShellFileHandleReadLine( > // > // if we have space save it... > // > - if ((CountSoFar + 1) * CharSize < *Size){ > + if ((CountSoFar+1)*sizeof(CHAR16) < *Size){ > ASSERT(Buffer != NULL); > - if (*Ascii) { > - ((CHAR8*)Buffer)[CountSoFar] = (CHAR8) CharBuffer; > - ((CHAR8*)Buffer)[CountSoFar+1] = '\0'; > - } > - else { > - ((CHAR16*)Buffer)[CountSoFar] = CharBuffer; > - ((CHAR16*)Buffer)[CountSoFar+1] = CHAR_NULL; > - } > + ((CHAR16*)Buffer)[CountSoFar] = CharBuffer; > + ((CHAR16*)Buffer)[CountSoFar+1] = CHAR_NULL; > } > } > > // > // if we ran out of space tell when... > // > - if (Status != EFI_END_OF_FILE){ > - if ((CountSoFar + 1) * CharSize > *Size){ > - *Size = (CountSoFar + 1) * CharSize; > - if (!Truncate) { > - gEfiShellProtocol->SetFilePosition(Handle, OriginalFilePosition); > - } else { > - DEBUG((DEBUG_WARN, "The line was truncated in > ShellFileHandleReadLine")); > - } > - return (EFI_BUFFER_TOO_SMALL); > - } > - > - if (*Ascii) { > - if (CountSoFar && ((CHAR8*)Buffer)[CountSoFar - 1] == '\r') { > - ((CHAR8*)Buffer)[CountSoFar - 1] = '\0'; > - } > - } > - else { > - if (CountSoFar && Buffer[CountSoFar - 1] == L'\r') { > - Buffer[CountSoFar - 1] = CHAR_NULL; > - } > + if ((CountSoFar+1)*sizeof(CHAR16) > *Size){ > + *Size = (CountSoFar+1)*sizeof(CHAR16); > + if (!Truncate) { > + gEfiShellProtocol->SetFilePosition(Handle, OriginalFilePosition); > + } else { > + DEBUG((DEBUG_WARN, "The line was truncated in > ShellFileHandleReadLine")); > } > + return (EFI_BUFFER_TOO_SMALL); > + } > + while(Buffer[StrLen(Buffer)-1] == L'\r') { > + Buffer[StrLen(Buffer)-1] = CHAR_NULL; > } > > return (Status); > > _______________________________________________ > 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

