]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/WinNtSimpleFileSystemDxe/WinNtSimpleFileSystem.c
CryptoPkg/OpensslLib: Remove patch file and installation scripts.
[mirror_edk2.git] / Nt32Pkg / WinNtSimpleFileSystemDxe / WinNtSimpleFileSystem.c
index ef9fa8673c5ceac7a30278e4537d7a6235d66b94..b687e9c95746fd644dd6c4e017e85fb51e8fba36 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -628,6 +628,7 @@ Returns:
   StrCat (TempFileName, L"\\*");\r
 \r
   PrivateFile->LHandle = PrivateFile->WinNtThunk->FindFirstFile (TempFileName, &PrivateFile->FindBuf);\r
+  FreePool (TempFileName);\r
 \r
   if (PrivateFile->LHandle == INVALID_HANDLE_VALUE) {\r
     PrivateFile->IsValidFindBuf = FALSE;\r
@@ -747,6 +748,12 @@ GetNextFileNameToken (
     // Point *FileName to the next character after L'\'.\r
     //\r
     *FileName = *FileName + Offset + 1;\r
+    //\r
+    // If *FileName is an empty string, then set *FileName to NULL\r
+    //\r
+    if (**FileName == L'\0') {\r
+      *FileName = NULL;\r
+    }\r
   }\r
 \r
   return Token;\r
@@ -1188,6 +1195,7 @@ Returns:
         Status = EFI_NOT_FOUND;\r
       }\r
 \r
+      FreePool (TempFileName);\r
       goto Done;\r
     }\r
 \r
@@ -1196,6 +1204,7 @@ Returns:
     //\r
     StrCat (TempFileName, L"\\*");\r
     NewPrivateFile->LHandle = NewPrivateFile->WinNtThunk->FindFirstFile (TempFileName, &NewPrivateFile->FindBuf);\r
+    FreePool (TempFileName);\r
 \r
     if (NewPrivateFile->LHandle == INVALID_HANDLE_VALUE) {\r
       NewPrivateFile->IsValidFindBuf = FALSE;\r
@@ -1276,12 +1285,14 @@ Returns:
     Status = WinNtSimpleFileSystemGetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, &InfoSize, Info);\r
 \r
     if (EFI_ERROR (Status)) {\r
+      FreePool (Info);\r
       goto Done;\r
     }\r
 \r
     Info->Attribute = Attributes;\r
 \r
     WinNtSimpleFileSystemSetInfo (&NewPrivateFile->EfiFile, &gEfiFileInfoGuid, InfoSize, Info);\r
+    FreePool (Info);\r
   }\r
 \r
 Done:\r
@@ -1361,6 +1372,10 @@ Returns:
     FreePool (PrivateFile->FileName);\r
   }\r
 \r
+  if (PrivateFile->FilePath) {\r
+    FreePool (PrivateFile->FilePath);\r
+  }\r
+\r
   FreePool (PrivateFile);\r
 \r
   gBS->RestoreTPL (OldTpl);\r
@@ -1431,6 +1446,7 @@ Returns:
   }\r
 \r
   FreePool (PrivateFile->FileName);\r
+  FreePool (PrivateFile->FilePath);\r
   FreePool (PrivateFile);\r
 \r
   gBS->RestoreTPL (OldTpl);\r
@@ -1593,7 +1609,7 @@ Returns:
     Status = PrivateFile->WinNtThunk->ReadFile (\r
                                         PrivateFile->LHandle,\r
                                         Buffer,\r
-                                        *BufferSize,\r
+                                        (DWORD)*BufferSize,\r
                                         (LPDWORD)BufferSize,\r
                                         NULL\r
                                         ) ? EFI_SUCCESS : EFI_DEVICE_ERROR;\r
@@ -1764,7 +1780,7 @@ Returns:
   Status = PrivateFile->WinNtThunk->WriteFile (\r
                                       PrivateFile->LHandle,\r
                                       Buffer,\r
-                                      *BufferSize,\r
+                                      (DWORD)*BufferSize,\r
                                       (LPDWORD)BufferSize,\r
                                       NULL\r
                                       ) ? EFI_SUCCESS : EFI_DEVICE_ERROR;\r
@@ -1977,8 +1993,19 @@ Returns:
   CHAR16                      *TempPointer;\r
 \r
   Size        = SIZE_OF_EFI_FILE_INFO;\r
-  NameSize    = StrSize (PrivateFile->FileName);\r
-  ResultSize  = Size + NameSize;\r
+\r
+  RealFileName  = PrivateFile->FileName;\r
+  TempPointer   = RealFileName;\r
+  while (*TempPointer) {\r
+    if (*TempPointer == '\\') {\r
+      RealFileName = TempPointer + 1;\r
+    }\r
+\r
+    TempPointer++;\r
+  }\r
+  NameSize = StrSize (RealFileName);\r
+\r
+  ResultSize = Size + NameSize; \r
 \r
   Status      = EFI_BUFFER_TOO_SMALL;\r
   if (*BufferSize >= ResultSize) {\r
@@ -2046,17 +2073,6 @@ Returns:
       Info->Attribute |= EFI_FILE_DIRECTORY;\r
     }\r
 \r
-    RealFileName  = PrivateFile->FileName;\r
-    TempPointer   = RealFileName;\r
-\r
-    while (*TempPointer) {\r
-      if (*TempPointer == '\\') {\r
-        RealFileName = TempPointer + 1;\r
-      }\r
-\r
-      TempPointer++;\r
-    }\r
-\r
     if (PrivateFile->IsRootDirectory) {\r
       *((CHAR8 *) Buffer + Size) = 0;\r
     } else {\r
@@ -2404,7 +2420,7 @@ Returns:
   //\r
   NewFileInfo = (EFI_FILE_INFO *) Buffer;\r
 \r
-  if (NewFileInfo->Size <= sizeof (EFI_FILE_INFO) ||\r
+  if ((NewFileInfo->Size <= SIZE_OF_EFI_FILE_INFO) ||\r
       (NewFileInfo->Attribute &~(EFI_FILE_VALID_ATTR)) ||\r
       (sizeof (UINTN) == 4 && NewFileInfo->Size > 0xFFFFFFFF)\r
       ) {\r