+ //get file size of source file and freespace available on destination volume\r
+ //\r
+ ShellGetFileSize(SourceHandle, &SourceFileSize);\r
+ ShellGetFileSize(DestHandle, &DestFileSize);\r
+\r
+ //\r
+ //if the destination file already exists then it will be replaced, meaning the sourcefile effectively needs less storage space\r
+ //\r
+ if(DestFileSize < SourceFileSize){\r
+ SourceFileSize -= DestFileSize;\r
+ } else {\r
+ SourceFileSize = 0;\r
+ }\r
+\r
+ //\r
+ //get the system volume info to check the free space\r
+ //\r
+ DestVolumeFP = ConvertShellHandleToEfiFileProtocol(DestHandle);\r
+ DestVolumeInfo = NULL;\r
+ DestVolumeInfoSize = 0;\r
+ Status = DestVolumeFP->GetInfo(\r
+ DestVolumeFP,\r
+ &gEfiFileSystemInfoGuid,\r
+ &DestVolumeInfoSize,\r
+ DestVolumeInfo\r
+ );\r
+\r
+ if (Status == EFI_BUFFER_TOO_SMALL) {\r
+ DestVolumeInfo = AllocateZeroPool(DestVolumeInfoSize);\r
+ Status = DestVolumeFP->GetInfo(\r
+ DestVolumeFP,\r
+ &gEfiFileSystemInfoGuid,\r
+ &DestVolumeInfoSize,\r
+ DestVolumeInfo\r
+ );\r
+ }\r
+\r
+ //\r
+ //check if enough space available on destination drive to complete copy\r