/** Function gets the file information from an open file descriptor, and stores it in a buffer allocated from pool. @param FHand File Handle. @return A pointer to a buffer with file information or NULL is returned **/ EFI_FILE_INFO * EfiLibFileInfo ( IN EFI_FILE_HANDLE FHand ) { EFI_STATUS Status; EFI_FILE_INFO *Buffer; UINTN BufferSize; // // Initialize for GrowBuffer loop // Buffer = NULL; BufferSize = SIZE_OF_EFI_FILE_INFO + 200; // // Call the real function // while (EfiGrowBuffer (&Status, (VOID **) &Buffer, BufferSize)) { Status = FHand->GetInfo ( FHand, &gEfiFileInfoGuid, &BufferSize, Buffer ); } return Buffer; }
/** Function gets the file system information from an open file descriptor, and stores it in a buffer allocated from pool. @param FHand The file handle. @return A pointer to a buffer with file information. @retval NULL is returned if failed to get Vaolume Label Info. **/ EFI_FILE_SYSTEM_VOLUME_LABEL * EfiLibFileSystemVolumeLabelInfo ( IN EFI_FILE_HANDLE FHand ) { EFI_STATUS Status; EFI_FILE_SYSTEM_VOLUME_LABEL *Buffer; UINTN BufferSize; // // Initialize for GrowBuffer loop // Buffer = NULL; BufferSize = SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL + 200; // // Call the real function // while (EfiGrowBuffer (&Status, (VOID **) &Buffer, BufferSize)) { Status = FHand->GetInfo ( FHand, &gEfiFileSystemVolumeLabelInfoIdGuid, &BufferSize, Buffer ); } return Buffer; }
/** Function gets the file information from an open file descriptor, and stores it in a buffer allocated from pool. @param FHand File Handle. @return A pointer to a buffer with file information or NULL is returned **/ EFI_FILE_INFO * EfiLibFileInfo ( IN EFI_FILE_HANDLE FHand ) { #if 0 EFI_STATUS Status = EFI_SUCCESS; EFI_FILE_INFO *Buffer = NULL; UINTN BufferSize = 0; // // Initialize for GrowBuffer loop // Buffer = NULL; BufferSize = SIZE_OF_EFI_FILE_INFO + 200; // // Call the real function // while (EfiGrowBuffer (&Status, (VOID **) &Buffer, BufferSize)) { Status = FHand->GetInfo ( FHand, &gEfiFileInfoGuid, &BufferSize, Buffer ); } return Buffer; #else EFI_STATUS Status; EFI_FILE_INFO *FileInfo = NULL; UINTN Size = 0; Status = FHand->GetInfo (FHand, &gEfiFileInfoGuid, &Size, FileInfo); if (Status == EFI_BUFFER_TOO_SMALL) { // inc size by 2 because some drivers (HFSPlus.efi) do not count 0 at the end of file name Size += 2; FileInfo = AllocateZeroPool (Size); Status = FHand->GetInfo (FHand, &gEfiFileInfoGuid, &Size, FileInfo); } return EFI_ERROR(Status)?NULL:FileInfo; #endif }
/** Function gets the file system information from an open file descriptor, and stores it in a buffer allocated from pool. @param FHand The file handle. @return A pointer to a buffer with file information. @retval NULL is returned if failed to get Vaolume Label Info. **/ EFI_FILE_SYSTEM_VOLUME_LABEL * EfiLibFileSystemVolumeLabelInfo ( IN EFI_FILE_HANDLE FHand ) { #if 0 EFI_STATUS Status = EFI_SUCCESS; EFI_FILE_SYSTEM_VOLUME_LABEL *Buffer; UINTN BufferSize; // // Initialize for GrowBuffer loop // Buffer = NULL; BufferSize = SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL + 200; // // Call the real function // while (EfiGrowBuffer (&Status, (VOID **) &Buffer, BufferSize)) { Status = FHand->GetInfo ( FHand, &gEfiFileSystemVolumeLabelInfoIdGuid, &BufferSize, Buffer ); } return Buffer; #else EFI_STATUS Status; EFI_FILE_SYSTEM_VOLUME_LABEL *VolumeInfo = NULL; UINTN Size = 0; Status = FHand->GetInfo (FHand, &gEfiFileSystemVolumeLabelInfoIdGuid, &Size, VolumeInfo); if (Status == EFI_BUFFER_TOO_SMALL) { // inc size by 2 because some drivers (HFSPlus.efi) do not count 0 at the end of file name Size += 2; VolumeInfo = AllocateZeroPool (Size); Status = FHand->GetInfo (FHand, &gEfiFileSystemVolumeLabelInfoIdGuid, &Size, VolumeInfo); // Check to make sure this isn't actually EFI_FILE_SYSTEM_INFO if (!EFI_ERROR(Status)) { EFI_FILE_SYSTEM_INFO *FSInfo = (EFI_FILE_SYSTEM_INFO *)VolumeInfo; if (FSInfo->Size == (UINT64)Size) { // Allocate a new volume label VolumeInfo = (EFI_FILE_SYSTEM_VOLUME_LABEL *)EfiStrDuplicate(FSInfo->VolumeLabel); FreePool(FSInfo); } } if (!EFI_ERROR(Status)) { return VolumeInfo; } FreePool(VolumeInfo); } return NULL; #endif }