diff options
Diffstat (limited to 'EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c')
-rw-r--r-- | EdkNt32Pkg/Dxe/WinNtThunk/Bus/SimpleFileSystem/WinNtSimpleFileSystem.c | 35 |
1 files changed, 23 insertions, 12 deletions
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,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) {
|