From cb360b2656f4ca06b0b216dd7b9933312abeb786 Mon Sep 17 00:00:00 2001 From: xgu3 Date: Thu, 29 Mar 2007 06:04:36 +0000 Subject: to fix [NT32] Emulator can't run when built with /O1 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2512 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Bus/SimpleFileSystem/WinNtSimpleFileSystem.c | 35 ++++++++++++++-------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c b/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c index 0b5e538..d55a153 100644 --- a/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c +++ b/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c @@ -138,11 +138,12 @@ Returns: ASSERT (0); } - for (Pointer = Str; *(Pointer + Count); Pointer++) { - *Pointer = *(Pointer + Count); + if (Count != 0) { + for (Pointer = Str; *(Pointer + Count); Pointer++) { + *Pointer = *(Pointer + Count); + } + *Pointer = *(Pointer + Count); } - - *Pointer = *(Pointer + Count); } @@ -632,13 +633,10 @@ Returns: CHAR16 TempChar; DWORD LastError; UINTN Count; - BOOLEAN TrailingDash; BOOLEAN LoopFinish; UINTN InfoSize; EFI_FILE_INFO *Info; - TrailingDash = FALSE; - // // Check for obvious invalid parameters. // @@ -667,11 +665,28 @@ Returns: return EFI_INVALID_PARAMETER; } + // + // Init local variables + // PrivateFile = WIN_NT_EFI_FILE_PRIVATE_DATA_FROM_THIS (This); PrivateRoot = WIN_NT_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem); NewPrivateFile = NULL; // + // Allocate buffer for FileName as the passed in FileName may be read only + // + Status = gBS->AllocatePool ( + EfiBootServicesData, + StrSize (FileName), + &TempFileName + ); + if (EFI_ERROR (Status)) { + return Status; + } + StrCpy (TempFileName, FileName); + FileName = TempFileName; + + // // BUGBUG: assume an open of root // if current location, return current data // @@ -686,7 +701,6 @@ OpenRoot: } if (FileName[StrLen (FileName) - 1] == L'\\') { - TrailingDash = TRUE; FileName[StrLen (FileName) - 1] = 0; } @@ -1067,10 +1081,7 @@ OpenRoot: } Done: ; - if (TrailingDash) { - FileName[StrLen (FileName) + 1] = 0; - FileName[StrLen (FileName)] = L'\\'; - } + gBS->FreePool (FileName); if (EFI_ERROR (Status)) { if (NewPrivateFile) { -- cgit v1.1