-/*++\r
+/** @file\r
+ Functions that perform file read/write.\r
\r
-Copyright (c) 2005 - 2009, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available\r
-under the terms and conditions of the BSD License which accompanies this\r
-distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
+Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
+**/\r
\r
-Module Name:\r
+#include "Fat.h"\r
\r
- ReadWrite.c\r
+/**\r
\r
-Abstract:\r
+ Get the file's position of the file.\r
\r
- Functions that perform file read/write\r
\r
-Revision History\r
+ @param FHand - The handle of file.\r
+ @param Position - The file's position of the file.\r
\r
---*/\r
-\r
-#include "Fat.h"\r
+ @retval EFI_SUCCESS - Get the info successfully.\r
+ @retval EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
+ @retval EFI_UNSUPPORTED - The open file is not a file.\r
\r
+**/\r
EFI_STATUS\r
EFIAPI\r
FatGetPosition (\r
- IN EFI_FILE_PROTOCOL *FHand,\r
- OUT UINT64 *Position\r
+ IN EFI_FILE_PROTOCOL *FHand,\r
+ OUT UINT64 *Position\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Get the file's position of the file.\r
-\r
-Arguments:\r
-\r
- FHand - The handle of file.\r
- Position - The file's position of the file.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Get the info successfully.\r
- EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
- EFI_UNSUPPORTED - The open file is not a file.\r
-\r
---*/\r
{\r
- FAT_IFILE *IFile;\r
- FAT_OFILE *OFile;\r
+ FAT_IFILE *IFile;\r
+ FAT_OFILE *OFile;\r
\r
IFile = IFILE_FROM_FHAND (FHand);\r
OFile = IFile->OFile;\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+\r
+ Set the file's position of the file.\r
+\r
+ @param FHand - The handle of file.\r
+ @param Position - The file's position of the file.\r
+\r
+ @retval EFI_SUCCESS - Set the info successfully.\r
+ @retval EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
+ @retval EFI_UNSUPPORTED - Set a directory with a not-zero position.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
FatSetPosition (\r
IN EFI_FILE_PROTOCOL *FHand,\r
IN UINT64 Position\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Set the file's position of the file.\r
-\r
-Arguments:\r
-\r
- FHand - The handle of file.\r
- Position - The file's position of the file.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - Set the info successfully.\r
- EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
- EFI_UNSUPPORTED - Set a directory with a not-zero position.\r
-\r
---*/\r
{\r
- FAT_IFILE *IFile;\r
- FAT_OFILE *OFile;\r
+ FAT_IFILE *IFile;\r
+ FAT_OFILE *OFile;\r
\r
IFile = IFILE_FROM_FHAND (FHand);\r
OFile = IFile->OFile;\r
if (OFile->Error == EFI_NOT_FOUND) {\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
+ FatWaitNonblockingTask (IFile);\r
+\r
//\r
// If this is a directory, we can only set back to position 0\r
//\r
\r
FatResetODirCursor (OFile);\r
}\r
+\r
//\r
// Set the position\r
//\r
if (Position == (UINT64)-1) {\r
Position = OFile->FileSize;\r
}\r
+\r
//\r
// Set the position\r
//\r
return EFI_SUCCESS;\r
}\r
\r
-EFI_STATUS\r
-FatIFileReadDir (\r
- IN FAT_IFILE *IFile,\r
- IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
\r
Get the file info from the open file of the IFile into Buffer.\r
\r
-Arguments:\r
-\r
- IFile - The instance of the open file.\r
- BufferSize - Size of Buffer.\r
- Buffer - Buffer containing read data.\r
-\r
-Returns:\r
+ @param IFile - The instance of the open file.\r
+ @param BufferSize - Size of Buffer.\r
+ @param Buffer - Buffer containing read data.\r
\r
- EFI_SUCCESS - Get the file info successfully.\r
- other - An error occurred when operation the disk.\r
+ @retval EFI_SUCCESS - Get the file info successfully.\r
+ @retval other - An error occurred when operation the disk.\r
\r
---*/\r
+**/\r
+EFI_STATUS\r
+FatIFileReadDir (\r
+ IN FAT_IFILE *IFile,\r
+ IN OUT UINTN *BufferSize,\r
+ OUT VOID *Buffer\r
+ )\r
{\r
EFI_STATUS Status;\r
FAT_OFILE *OFile;\r
FAT_DIRENT *DirEnt;\r
UINT32 CurrentPos;\r
\r
- OFile = IFile->OFile;\r
- ODir = OFile->ODir;\r
- CurrentPos = ((UINT32) IFile->Position) / sizeof (FAT_DIRECTORY_ENTRY);\r
+ OFile = IFile->OFile;\r
+ ODir = OFile->ODir;\r
+ CurrentPos = ((UINT32)IFile->Position) / sizeof (FAT_DIRECTORY_ENTRY);\r
\r
//\r
// We need to relocate the directory\r
//\r
FatResetODirCursor (OFile);\r
}\r
+\r
//\r
// We seek the next directory entry's position\r
//\r
do {\r
Status = FatGetNextDirEnt (OFile, &DirEnt);\r
- if (EFI_ERROR (Status) || DirEnt == NULL) {\r
+ if (EFI_ERROR (Status) || (DirEnt == NULL)) {\r
//\r
// Something error occurred or reach the end of directory,\r
// return 0 buffersize\r
goto Done;\r
}\r
} while (ODir->CurrentPos <= CurrentPos);\r
+\r
Status = FatGetDirEntInfo (OFile->Volume, DirEnt, BufferSize, Buffer);\r
\r
Done:\r
// Update IFile->Position, if everything is all right\r
//\r
CurrentPos = ODir->CurrentPos;\r
- IFile->Position = (UINT64) (CurrentPos * sizeof (FAT_DIRECTORY_ENTRY));\r
+ IFile->Position = CurrentPos * sizeof (FAT_DIRECTORY_ENTRY);\r
}\r
\r
return Status;\r
}\r
\r
-EFI_STATUS\r
-FatIFileAccess (\r
- IN EFI_FILE_PROTOCOL *FHand,\r
- IN IO_MODE IoMode,\r
- IN OUT UINTN *BufferSize,\r
- IN OUT VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
\r
Get the file info from the open file of the IFile into Buffer.\r
\r
-Arguments:\r
+ @param FHand - The file handle to access.\r
+ @param IoMode - Indicate whether the access mode is reading or writing.\r
+ @param BufferSize - Size of Buffer.\r
+ @param Buffer - Buffer containing read data.\r
+ @param Token - A pointer to the token associated with the transaction.\r
\r
- FHand - The file handle to access.\r
- IoMode - Indicate whether the access mode is reading or writing.\r
- BufferSize - Size of Buffer.\r
- Buffer - Buffer containing read data.\r
+ @retval EFI_SUCCESS - Get the file info successfully.\r
+ @retval EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
+ @retval EFI_VOLUME_CORRUPTED - The file type of open file is error.\r
+ @retval EFI_WRITE_PROTECTED - The disk is write protect.\r
+ @retval EFI_ACCESS_DENIED - The file is read-only.\r
+ @return other - An error occurred when operating on the disk.\r
\r
-Returns:\r
-\r
- EFI_SUCCESS - Get the file info successfully.\r
- EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
- EFI_VOLUME_CORRUPTED - The file type of open file is error.\r
- EFI_WRITE_PROTECTED - The disk is write protect.\r
- EFI_ACCESS_DENIED - The file is read-only.\r
- other - An error occurred when operating on the disk.\r
-\r
---*/\r
+**/\r
+EFI_STATUS\r
+FatIFileAccess (\r
+ IN EFI_FILE_PROTOCOL *FHand,\r
+ IN IO_MODE IoMode,\r
+ IN OUT UINTN *BufferSize,\r
+ IN OUT VOID *Buffer,\r
+ IN EFI_FILE_IO_TOKEN *Token\r
+ )\r
{\r
EFI_STATUS Status;\r
FAT_IFILE *IFile;\r
FAT_OFILE *OFile;\r
FAT_VOLUME *Volume;\r
UINT64 EndPosition;\r
+ FAT_TASK *Task;\r
\r
IFile = IFILE_FROM_FHAND (FHand);\r
OFile = IFile->OFile;\r
Volume = OFile->Volume;\r
+ Task = NULL;\r
+\r
+ //\r
+ // Write to a directory is unsupported\r
+ //\r
+ if ((OFile->ODir != NULL) && (IoMode == WriteData)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
\r
if (OFile->Error == EFI_NOT_FOUND) {\r
return EFI_DEVICE_ERROR;\r
}\r
\r
- if (IoMode == READ_DATA) {\r
+ if (IoMode == ReadData) {\r
//\r
// If position is at EOF, then return device error\r
//\r
}\r
}\r
\r
+ if (Token == NULL) {\r
+ FatWaitNonblockingTask (IFile);\r
+ } else {\r
+ //\r
+ // Caller shouldn't call the non-blocking interfaces if the low layer doesn't support DiskIo2.\r
+ // But if it calls, the below check can avoid crash.\r
+ //\r
+ if (FHand->Revision < EFI_FILE_PROTOCOL_REVISION2) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
+ Task = FatCreateTask (IFile, Token);\r
+ if (Task == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ }\r
+\r
FatAcquireLock ();\r
\r
Status = OFile->Error;\r
if (!EFI_ERROR (Status)) {\r
if (OFile->ODir != NULL) {\r
//\r
- // Access a directory\r
+ // Read a directory is supported\r
//\r
- Status = EFI_UNSUPPORTED;\r
- if (IoMode == READ_DATA) {\r
- //\r
- // Read a directory is supported\r
- //\r
- Status = FatIFileReadDir (IFile, BufferSize, Buffer);\r
- }\r
-\r
- OFile = NULL;\r
+ ASSERT (IoMode == ReadData);\r
+ Status = FatIFileReadDir (IFile, BufferSize, Buffer);\r
+ OFile = NULL;\r
} else {\r
//\r
// Access a file\r
//\r
// The position goes beyond the end of file\r
//\r
- if (IoMode == READ_DATA) {\r
+ if (IoMode == ReadData) {\r
//\r
// Adjust the actual size read\r
//\r
- *BufferSize -= (UINTN) EndPosition - OFile->FileSize;\r
+ *BufferSize -= (UINTN)EndPosition - OFile->FileSize;\r
} else {\r
//\r
// We expand the file size of OFile\r
}\r
}\r
\r
- Status = FatAccessOFile (OFile, IoMode, (UINTN) IFile->Position, BufferSize, Buffer);\r
+ Status = FatAccessOFile (OFile, IoMode, (UINTN)IFile->Position, BufferSize, Buffer, Task);\r
IFile->Position += *BufferSize;\r
}\r
}\r
\r
-Done:\r
- if (EFI_ERROR (Status)) {\r
- Status = FatCleanupVolume (Volume, OFile, Status);\r
+ if (Token != NULL) {\r
+ if (!EFI_ERROR (Status)) {\r
+ Status = FatQueueTask (IFile, Task);\r
+ } else {\r
+ FatDestroyTask (Task);\r
+ }\r
}\r
+\r
+Done:\r
//\r
// On EFI_SUCCESS case, not calling FatCleanupVolume():\r
// 1) The Cache flush operation is avoided to enhance\r
// 3) Write operation doesn't affect OFile/IFile structure, so\r
// Reference checking is not necessary.\r
//\r
+ if (EFI_ERROR (Status)) {\r
+ Status = FatCleanupVolume (Volume, OFile, Status, NULL);\r
+ }\r
+\r
FatReleaseLock ();\r
return Status;\r
}\r
\r
+/**\r
+\r
+ Get the file info.\r
+\r
+ @param FHand - The handle of the file.\r
+ @param BufferSize - Size of Buffer.\r
+ @param Buffer - Buffer containing read data.\r
+\r
+\r
+ @retval EFI_SUCCESS - Get the file info successfully.\r
+ @retval EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
+ @retval EFI_VOLUME_CORRUPTED - The file type of open file is error.\r
+ @return other - An error occurred when operation the disk.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
FatRead (\r
IN EFI_FILE_PROTOCOL *FHand,\r
IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
+ OUT VOID *Buffer\r
)\r
-/*++\r
+{\r
+ return FatIFileAccess (FHand, ReadData, BufferSize, Buffer, NULL);\r
+}\r
\r
-Routine Description:\r
+/**\r
\r
Get the file info.\r
\r
-Arguments:\r
-\r
- FHand - The handle of the file.\r
- BufferSize - Size of Buffer.\r
- Buffer - Buffer containing read data.\r
-\r
-Returns:\r
+ @param FHand - The handle of the file.\r
+ @param Token - A pointer to the token associated with the transaction.\r
\r
- EFI_SUCCESS - Get the file info successfully.\r
- EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
- EFI_VOLUME_CORRUPTED - The file type of open file is error.\r
- other - An error occurred when operation the disk.\r
+ @retval EFI_SUCCESS - Get the file info successfully.\r
+ @retval EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
+ @retval EFI_VOLUME_CORRUPTED - The file type of open file is error.\r
+ @return other - An error occurred when operation the disk.\r
\r
---*/\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+FatReadEx (\r
+ IN EFI_FILE_PROTOCOL *FHand,\r
+ IN OUT EFI_FILE_IO_TOKEN *Token\r
+ )\r
{\r
- return FatIFileAccess (FHand, READ_DATA, BufferSize, Buffer);\r
+ return FatIFileAccess (FHand, ReadData, &Token->BufferSize, Token->Buffer, Token);\r
}\r
\r
+/**\r
+\r
+ Write the content of buffer into files.\r
+\r
+ @param FHand - The handle of the file.\r
+ @param BufferSize - Size of Buffer.\r
+ @param Buffer - Buffer containing write data.\r
+\r
+ @retval EFI_SUCCESS - Set the file info successfully.\r
+ @retval EFI_WRITE_PROTECTED - The disk is write protect.\r
+ @retval EFI_ACCESS_DENIED - The file is read-only.\r
+ @retval EFI_DEVICE_ERROR - The OFile is not valid.\r
+ @retval EFI_UNSUPPORTED - The open file is not a file.\r
+ - The writing file size is larger than 4GB.\r
+ @return other - An error occurred when operation the disk.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
FatWrite (\r
IN OUT UINTN *BufferSize,\r
IN VOID *Buffer\r
)\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Write the content of buffer into files.\r
-\r
-Arguments:\r
+{\r
+ return FatIFileAccess (FHand, WriteData, BufferSize, Buffer, NULL);\r
+}\r
\r
- FHand - The handle of the file.\r
- BufferSize - Size of Buffer.\r
- Buffer - Buffer containing write data.\r
+/**\r
\r
-Returns:\r
+ Get the file info.\r
\r
- EFI_SUCCESS - Set the file info successfully.\r
- EFI_WRITE_PROTECTED - The disk is write protect.\r
- EFI_ACCESS_DENIED - The file is read-only.\r
- EFI_DEVICE_ERROR - The OFile is not valid.\r
- EFI_UNSUPPORTED - The open file is not a file.\r
- - The writing file size is larger than 4GB.\r
- other - An error occurred when operation the disk.\r
+ @param FHand - The handle of the file.\r
+ @param Token - A pointer to the token associated with the transaction.\r
\r
---*/\r
-{\r
- return FatIFileAccess (FHand, WRITE_DATA, BufferSize, Buffer);\r
-}\r
+ @retval EFI_SUCCESS - Get the file info successfully.\r
+ @retval EFI_DEVICE_ERROR - Can not find the OFile for the file.\r
+ @retval EFI_VOLUME_CORRUPTED - The file type of open file is error.\r
+ @return other - An error occurred when operation the disk.\r
\r
+**/\r
EFI_STATUS\r
-FatAccessOFile (\r
- IN FAT_OFILE *OFile,\r
- IN IO_MODE IoMode,\r
- IN UINTN Position,\r
- IN OUT UINTN *DataBufferSize,\r
- IN OUT UINT8 *UserBuffer\r
+EFIAPI\r
+FatWriteEx (\r
+ IN EFI_FILE_PROTOCOL *FHand,\r
+ IN OUT EFI_FILE_IO_TOKEN *Token\r
)\r
-/*++\r
+{\r
+ return FatIFileAccess (FHand, WriteData, &Token->BufferSize, Token->Buffer, Token);\r
+}\r
\r
-Routine Description:\r
+/**\r
\r
This function reads data from a file or writes data to a file.\r
It uses OFile->PosRem to determine how much data can be accessed in one time.\r
\r
-Arguments:\r
+ @param OFile - The open file.\r
+ @param IoMode - Indicate whether the access mode is reading or writing.\r
+ @param Position - The position where data will be accessed.\r
+ @param DataBufferSize - Size of Buffer.\r
+ @param UserBuffer - Buffer containing data.\r
+ @param Task point to task instance.\r
\r
- OFile - The open file.\r
- IoMode - Indicate whether the access mode is reading or writing.\r
- Position - The position where data will be accessed.\r
- DataBufferSize - Size of Buffer.\r
- UserBuffer - Buffer containing data.\r
+ @retval EFI_SUCCESS - Access the data successfully.\r
+ @return other - An error occurred when operating on the disk.\r
\r
-Returns:\r
-\r
- EFI_SUCCESS - Access the data successfully.\r
- other - An error occurred when operating on the disk.\r
-\r
---*/\r
+**/\r
+EFI_STATUS\r
+FatAccessOFile (\r
+ IN FAT_OFILE *OFile,\r
+ IN IO_MODE IoMode,\r
+ IN UINTN Position,\r
+ IN OUT UINTN *DataBufferSize,\r
+ IN OUT UINT8 *UserBuffer,\r
+ IN FAT_TASK *Task\r
+ )\r
{\r
FAT_VOLUME *Volume;\r
UINTN Len;\r
EFI_STATUS Status;\r
UINTN BufferSize;\r
\r
- BufferSize = *DataBufferSize;\r
- Volume = OFile->Volume;\r
+ BufferSize = *DataBufferSize;\r
+ Volume = OFile->Volume;\r
ASSERT_VOLUME_LOCKED (Volume);\r
\r
Status = EFI_SUCCESS;\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
+\r
//\r
// Clip length to block run\r
//\r
//\r
// Write the data\r
//\r
- Status = FatDiskIo (Volume, IoMode, OFile->PosDisk, Len, UserBuffer);\r
+ Status = FatDiskIo (Volume, IoMode, OFile->PosDisk, Len, UserBuffer, Task);\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
+\r
//\r
// Data was successfully accessed\r
//\r
Position += Len;\r
UserBuffer += Len;\r
BufferSize -= Len;\r
- if (IoMode == WRITE_DATA) {\r
- OFile->Dirty = TRUE;\r
- OFile->Archive = TRUE;\r
+ if (IoMode == WriteData) {\r
+ OFile->Dirty = TRUE;\r
+ OFile->Archive = TRUE;\r
}\r
+\r
//\r
// Make sure no outbound occurred\r
//\r
ASSERT (Position <= OFile->FileSize);\r
}\r
+\r
//\r
// Update the number of bytes accessed\r
//\r
return Status;\r
}\r
\r
-EFI_STATUS\r
-FatExpandOFile (\r
- IN FAT_OFILE *OFile,\r
- IN UINT64 ExpandedSize\r
- )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
\r
Expand OFile by appending zero bytes at the end of OFile.\r
\r
-Arguments:\r
-\r
- OFile - The open file.\r
- ExpandedSize - The number of zero bytes appended at the end of the file.\r
+ @param OFile - The open file.\r
+ @param ExpandedSize - The number of zero bytes appended at the end of the file.\r
\r
-Returns:\r
+ @retval EFI_SUCCESS - The file is expanded successfully.\r
+ @return other - An error occurred when expanding file.\r
\r
- EFI_SUCCESS - The file is expanded successfully.\r
- other - An error occurred when expanding file.\r
-\r
---*/\r
+**/\r
+EFI_STATUS\r
+FatExpandOFile (\r
+ IN FAT_OFILE *OFile,\r
+ IN UINT64 ExpandedSize\r
+ )\r
{\r
EFI_STATUS Status;\r
UINTN WritePos;\r
\r
- WritePos = OFile->FileSize;\r
- Status = FatGrowEof (OFile, ExpandedSize);\r
+ WritePos = OFile->FileSize;\r
+ Status = FatGrowEof (OFile, ExpandedSize);\r
if (!EFI_ERROR (Status)) {\r
Status = FatWriteZeroPool (OFile, WritePos);\r
}\r
return Status;\r
}\r
\r
-EFI_STATUS\r
-FatWriteZeroPool (\r
- IN FAT_OFILE *OFile,\r
- IN UINTN WritePos\r
- )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
\r
Write zero pool from the WritePos to the end of OFile.\r
\r
-Arguments:\r
-\r
- OFile - The open file to write zero pool.\r
- WritePos - The number of zero bytes written.\r
+ @param OFile - The open file to write zero pool.\r
+ @param WritePos - The number of zero bytes written.\r
\r
-Returns:\r
+ @retval EFI_SUCCESS - Write the zero pool successfully.\r
+ @retval EFI_OUT_OF_RESOURCES - Not enough memory to perform the operation.\r
+ @return other - An error occurred when writing disk.\r
\r
- EFI_SUCCESS - Write the zero pool successfully.\r
- EFI_OUT_OF_RESOURCES - Not enough memory to perform the operation.\r
- other - An error occurred when writing disk.\r
-\r
---*/\r
+**/\r
+EFI_STATUS\r
+FatWriteZeroPool (\r
+ IN FAT_OFILE *OFile,\r
+ IN UINTN WritePos\r
+ )\r
{\r
EFI_STATUS Status;\r
VOID *ZeroBuffer;\r
UINTN BufferSize;\r
UINTN WriteSize;\r
\r
- AppendedSize = OFile->FileSize - WritePos;\r
- BufferSize = AppendedSize;\r
+ AppendedSize = OFile->FileSize - WritePos;\r
+ BufferSize = AppendedSize;\r
if (AppendedSize > FAT_MAX_ALLOCATE_SIZE) {\r
//\r
// If the appended size is larger, maybe we can not allocate the whole\r
}\r
\r
do {\r
- WriteSize = AppendedSize > BufferSize ? BufferSize : (UINTN) AppendedSize;\r
+ WriteSize = AppendedSize > BufferSize ? BufferSize : (UINTN)AppendedSize;\r
AppendedSize -= WriteSize;\r
- Status = FatAccessOFile (OFile, WRITE_DATA, WritePos, &WriteSize, ZeroBuffer);\r
+ Status = FatAccessOFile (OFile, WriteData, WritePos, &WriteSize, ZeroBuffer, NULL);\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
return Status;\r
}\r
\r
-EFI_STATUS\r
-FatTruncateOFile (\r
- IN FAT_OFILE *OFile,\r
- IN UINTN TruncatedSize\r
- )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
\r
Truncate the OFile to smaller file size.\r
\r
-Arguments:\r
-\r
- OFile - The open file.\r
- TruncatedSize - The new file size.\r
-\r
-Returns:\r
+ @param OFile - The open file.\r
+ @param TruncatedSize - The new file size.\r
\r
- EFI_SUCCESS - The file is truncated successfully.\r
- other - An error occurred when truncating file.\r
+ @retval EFI_SUCCESS - The file is truncated successfully.\r
+ @return other - An error occurred when truncating file.\r
\r
---*/\r
+**/\r
+EFI_STATUS\r
+FatTruncateOFile (\r
+ IN FAT_OFILE *OFile,\r
+ IN UINTN TruncatedSize\r
+ )\r
{\r
OFile->FileSize = TruncatedSize;\r
return FatShrinkEof (OFile);\r