X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkNt32Pkg%2FDxe%2FWinNtThunk%2FBus%2FSimpleFileSystem%2FWinNtSimpleFileSystem.c;h=d55a153f9b9900c5656fed7b9cde0214305c9953;hp=0b5e538da7ac5898af8945d74fd115fbda1220a7;hb=cb360b2656f4ca06b0b216dd7b9933312abeb786;hpb=4b2e068430507d4ba1ec330e1665b8d7b45771ac diff --git a/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c b/EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c index 0b5e538da7..d55a153f9b 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,10 +665,27 @@ 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) {