/** Set the size of a file. This function changes the file size info from the FileHandle's EFI_FILE_INFO data. @param[in] FileHandle The file handle whose size is to be changed. @param[in] Size The new size. @retval EFI_SUCCESS The operation completed successfully. @retval EFI_DEVICE_ERROR Cannot access the file. @retval EFI_INVALID_PARAMETER FileHandle is NULL. **/ EFI_STATUS EFIAPI FileHandleSetSize ( IN EFI_FILE_HANDLE FileHandle, IN UINT64 Size ) { EFI_FILE_INFO *FileInfo; EFI_STATUS Status; if (FileHandle == NULL) { return (EFI_INVALID_PARAMETER); } // // get the FileInfo structure // FileInfo = FileHandleGetInfo(FileHandle); if (FileInfo == NULL) { return (EFI_DEVICE_ERROR); } // // Assign the FileSize pointer to the new value // FileInfo->FileSize = Size; Status = FileHandleSetInfo(FileHandle, FileInfo); // // free the FileInfo memory // FreePool(FileInfo); return (Status); }
/** Open the NvVars file for reading or writing @param[in] File - The file to inspect @param[out] Exists - Returns whether the file exists @param[out] Size - Returns the size of the file (0 if the file does not exist) **/ EFI_STATUS FileHandleEmpty ( IN EFI_FILE_HANDLE File ) { EFI_STATUS Status; EFI_FILE_INFO *FileInfo; // // Retrieve the FileInfo structure // FileInfo = FileHandleGetInfo (File); if (FileInfo == NULL) { return EFI_INVALID_PARAMETER; } // // If the path is a directory, then return an error // if ((FileInfo->Attribute & EFI_FILE_DIRECTORY) != 0) { FreePool (FileInfo); return EFI_INVALID_PARAMETER; } // // If the file size is already 0, then it is empty, so // we can return success. // if (FileInfo->FileSize == 0) { FreePool (FileInfo); return EFI_SUCCESS; } // // Set the file size to 0. // FileInfo->FileSize = 0; Status = FileHandleSetInfo (File, FileInfo); FreePool (FileInfo); return Status; }