EFI_STATUS BootMonFsInitialize ( IN BOOTMON_FS_INSTANCE *Instance ) { EFI_STATUS Status; EFI_LBA Lba; UINT32 ImageCount; BOOTMON_FS_FILE *NewFile; ImageCount = 0; Lba = 0; while (1) { Status = BootMonFsCreateFile (Instance, &NewFile); if (EFI_ERROR (Status)) { return Status; } Status = BootMonFsDiscoverNextImage (Instance, &Lba, &(NewFile->HwDescription)); if (EFI_ERROR (Status)) { // Free NewFile allocated by BootMonFsCreateFile () FreePool (NewFile); break; } InsertTailList (&Instance->RootFile->Link, &NewFile->Link); ImageCount++; } Instance->Initialized = TRUE; return EFI_SUCCESS; }
// Create a new instance of BOOTMON_FS_FILE. // Uses BootMonFsCreateFile to STATIC EFI_STATUS CreateNewFile ( IN BOOTMON_FS_INSTANCE *Instance, IN CHAR8* AsciiFileName, OUT BOOTMON_FS_FILE **NewHandle ) { EFI_STATUS Status; BOOTMON_FS_FILE *File; Status = BootMonFsCreateFile (Instance, &File); if (EFI_ERROR (Status)) { return Status; } // Remove the leading '\\' if (*AsciiFileName == '\\') { AsciiFileName++; } // Set the file name CopyMem (File->HwDescription.Footer.Filename, AsciiFileName, MAX_NAME_LENGTH); // Add the file to list of files of the File System InsertHeadList (&Instance->RootFile->Link, &File->Link); *NewHandle = File; return Status; }