}\r
\r
// If we're changing the file name\r
- if (AsciiStrCmp (FileNameAscii, File->HwDescription.Footer.Filename)) {\r
- // Check a file with that filename doesn't already exist\r
- if (BootMonGetFileFromAsciiFileName (\r
- File->Instance,\r
- File->HwDescription.Footer.Filename,\r
- &SameFile) != EFI_NOT_FOUND) {\r
- Status = EFI_ACCESS_DENIED;\r
- } else {\r
- AsciiStrCpy (FileNameAscii, File->HwDescription.Footer.Filename);\r
- Status = EFI_SUCCESS;\r
- }\r
+ if (AsciiStrCmp (FileNameAscii, File->HwDescription.Footer.Filename) == 0) {\r
+ // No change to filename.\r
+ Status = EFI_SUCCESS;\r
+ } else if (!(File->OpenMode & EFI_FILE_MODE_WRITE)) {\r
+ // You can only change the filename if you open the file for write.\r
+ Status = EFI_ACCESS_DENIED;\r
+ } else if (BootMonGetFileFromAsciiFileName (\r
+ File->Instance,\r
+ File->HwDescription.Footer.Filename,\r
+ &SameFile) != EFI_NOT_FOUND) {\r
+ // A file with that name already exists.\r
+ Status = EFI_ACCESS_DENIED;\r
} else {\r
- // No change to filename\r
+ // OK, change the filename.\r
+ AsciiStrCpy (FileNameAscii, File->HwDescription.Footer.Filename);\r
Status = EFI_SUCCESS;\r
}\r
\r
SetFileSize (\r
IN BOOTMON_FS_INSTANCE *Instance,\r
IN BOOTMON_FS_FILE *BootMonFsFile,\r
- IN UINTN Size\r
+ IN UINTN NewSize\r
)\r
{\r
UINT64 StoredPosition;\r
EFI_FILE_PROTOCOL *File;\r
CHAR8 Buffer;\r
UINTN BufferSize;\r
+ UINT32 OldSize;\r
+\r
+ OldSize = BootMonFsFile->HwDescription.Region[0].Size;\r
+\r
+ if (OldSize == NewSize) {\r
+ return EFI_SUCCESS;\r
+ }\r
\r
Buffer = 0;\r
BufferSize = sizeof (Buffer);\r
return EFI_ACCESS_DENIED;\r
}\r
\r
- if (Size <= BootMonFsFile->HwDescription.Region[0].Size) {\r
- BootMonFsFile->HwDescription.Region[0].Size = Size;\r
+ if (NewSize <= OldSize) {\r
+ OldSize = NewSize;\r
} else {\r
// Increasing a file's size is potentially complicated as it may require\r
// moving the image description on media. The simplest way to do it is to\r
return Status;\r
}\r
\r
- Status = File->SetPosition (File, Size - 1);\r
+ Status = File->SetPosition (File, NewSize - 1);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
}\r
\r
// Restore saved position\r
- Status = File->SetPosition (File, Size - 1);\r
+ Status = File->SetPosition (File, NewSize - 1);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
return EFI_ACCESS_DENIED;\r
}\r
\r
- SetFileName (File, Info->FileName);\r
+ Status = SetFileName (File, Info->FileName);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r