]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmulatorPkg/EmuSimpleFileSystemDxe/EmuSimpleFileSystem.c
BaseTools:There is extra blank line in datalog
[mirror_edk2.git] / EmulatorPkg / EmuSimpleFileSystemDxe / EmuSimpleFileSystem.c
index 0af4860e4f59f5f82aa94c5fe2852a4f03264619..28abfd6beff74de78b7807a86a200efb0a0a846c 100644 (file)
@@ -4,7 +4,7 @@
   environment variables. The variables must be visible to the Microsoft*\r
   Developer Studio for them to work.\r
 \r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
 Portions copyright (c) 2011, Apple Inc. All rights reserved.\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
@@ -51,7 +51,10 @@ EmuSimpleFileSystemOpen (
   IN  UINT64              Attributes\r
   )\r
 {\r
+  EFI_STATUS                        Status;\r
+  EFI_TPL                           OldTpl;\r
   EMU_EFI_FILE_PRIVATE              *PrivateFile;\r
+  EMU_EFI_FILE_PRIVATE              *NewPrivateFile;\r
 \r
   //\r
   // Check for obvious invalid parameters.\r
@@ -81,9 +84,29 @@ EmuSimpleFileSystemOpen (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  PrivateFile     = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+\r
+  PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);\r
+\r
+  NewPrivateFile = AllocateCopyPool (sizeof (EMU_EFI_FILE_PRIVATE), PrivateFile);\r
+  if (NewPrivateFile == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Done;\r
+  }\r
+\r
+\r
+  Status = PrivateFile->Io->Open (PrivateFile->Io, &NewPrivateFile->Io, FileName, OpenMode, Attributes);\r
+  if (!EFI_ERROR (Status)) {\r
+    *NewHandle = &NewPrivateFile->EfiFile;\r
+  } else {\r
+    *NewHandle = NULL;\r
+    FreePool (NewPrivateFile);\r
+  }\r
+\r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
 \r
-  return PrivateFile->Io->Open (PrivateFile->Io, NewHandle, FileName, OpenMode, Attributes);\r
+  return Status;\r
 }\r
 \r
 \r
@@ -255,7 +278,7 @@ EmuSimpleFileSystemWrite (
 \r
 \r
 /**\r
-  Set a files current position\r
+  Get a file's current position\r
 \r
   @param  This            Protocol instance pointer.\r
   @param  Position        Byte position from the start of the file.\r
@@ -292,7 +315,7 @@ EmuSimpleFileSystemGetPosition (
 \r
 \r
 /**\r
-  Get a file's current position\r
+  Set file's current position\r
 \r
   @param  This            Protocol instance pointer.\r
   @param  Position        Byte position from the start of the file.\r
@@ -501,13 +524,16 @@ EmuSimpleFileSystemOpenVolume (
 \r
   PrivateFile = AllocatePool (sizeof (EMU_EFI_FILE_PRIVATE));\r
   if (PrivateFile == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
     goto Done;\r
   }\r
 \r
   PrivateFile->Signature            = EMU_EFI_FILE_PRIVATE_SIGNATURE;\r
   PrivateFile->IoThunk              = Private->IoThunk;\r
   PrivateFile->SimpleFileSystem     = This;\r
-  PrivateFile->EfiFile.Revision     = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION;\r
+\r
+  ZeroMem (&PrivateFile->EfiFile, sizeof (PrivateFile->EfiFile));\r
+  PrivateFile->EfiFile.Revision     = EFI_FILE_PROTOCOL_REVISION;\r
   PrivateFile->EfiFile.Open         = EmuSimpleFileSystemOpen;\r
   PrivateFile->EfiFile.Close        = EmuSimpleFileSystemClose;\r
   PrivateFile->EfiFile.Delete       = EmuSimpleFileSystemDelete;\r
@@ -722,6 +748,7 @@ EmuSimpleFileSystemDriverBindingStart (
 \r
   Private = AllocateZeroPool (sizeof (EMU_SIMPLE_FILE_SYSTEM_PRIVATE));\r
   if (Private == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
     goto Done;\r
   }\r
 \r
@@ -839,7 +866,6 @@ EmuSimpleFileSystemDriverBindingStop (
   }\r
 \r
   Private = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (SimpleFileSystem);\r
-  Status = Private->IoThunk->Close (Private->IoThunk);\r
 \r
   //\r
   // Uninstall the Simple File System Protocol from ControllerHandle\r
@@ -856,9 +882,12 @@ EmuSimpleFileSystemDriverBindingStop (
                     This->DriverBindingHandle,\r
                     ControllerHandle\r
                     );\r
-  }\r
-\r
-  if (!EFI_ERROR (Status)) {\r
+    ASSERT_EFI_ERROR (Status);\r
+    //\r
+    // Destroy the IO interface.\r
+    //\r
+    Status = Private->IoThunk->Close (Private->IoThunk);\r
+    ASSERT_EFI_ERROR (Status);\r
     //\r
     // Free our instance data\r
     //\r