| /** @file | |
| OpenVolume() function of Simple File System Protocol. | |
| Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available | |
| under the terms and conditions of the BSD License which accompanies this | |
| distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #include "Fat.h" | |
| /** | |
| Implements Simple File System Protocol interface function OpenVolume(). | |
| @param This - Calling context. | |
| @param File - the Root Directory of the volume. | |
| @retval EFI_OUT_OF_RESOURCES - Can not allocate the memory. | |
| @retval EFI_VOLUME_CORRUPTED - The FAT type is error. | |
| @retval EFI_SUCCESS - Open the volume successfully. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| FatOpenVolume ( | |
| IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, | |
| OUT EFI_FILE_PROTOCOL **File | |
| ) | |
| { | |
| EFI_STATUS Status; | |
| FAT_VOLUME *Volume; | |
| FAT_IFILE *IFile; | |
| Volume = VOLUME_FROM_VOL_INTERFACE (This); | |
| FatAcquireLock (); | |
| // | |
| // Open Root file | |
| // | |
| Status = FatOpenDirEnt (NULL, &Volume->RootDirEnt); | |
| if (EFI_ERROR (Status)) { | |
| goto Done; | |
| } | |
| // | |
| // Open a new instance to the root | |
| // | |
| Status = FatAllocateIFile (Volume->Root, &IFile); | |
| if (!EFI_ERROR (Status)) { | |
| *File = &IFile->Handle; | |
| } | |
| Done: | |
| Status = FatCleanupVolume (Volume, Volume->Root, Status, NULL); | |
| FatReleaseLock (); | |
| return Status; | |
| } |