File->Buffer = AllocatePool(File->BufferSize);
Status = refit_call3_wrapper(FileHandle->Read, FileHandle, &File->BufferSize, File->Buffer);
if (CheckError(Status, L"while loading the configuration file")) {
File->Buffer = AllocatePool(File->BufferSize);
Status = refit_call3_wrapper(FileHandle->Read, FileHandle, &File->BufferSize, File->Buffer);
if (CheckError(Status, L"while loading the configuration file")) {
// handle a parameter with a single string argument
static VOID HandleString(IN CHAR16 **TokenList, IN UINTN TokenCount, OUT CHAR16 **Target) {
if (TokenCount == 2) {
// handle a parameter with a single string argument
static VOID HandleString(IN CHAR16 **TokenList, IN UINTN TokenCount, OUT CHAR16 **Target) {
if (TokenCount == 2) {
} /* VOID ReadConfig() */
static VOID AddSubmenu(LOADER_ENTRY *Entry, REFIT_FILE *File, REFIT_VOLUME *Volume, CHAR16 *Title) {
} /* VOID ReadConfig() */
static VOID AddSubmenu(LOADER_ENTRY *Entry, REFIT_FILE *File, REFIT_VOLUME *Volume, CHAR16 *Title) {
while (((TokenCount = ReadTokenLine(File, &TokenList)) > 0) && (StriCmp(TokenList[0], L"}") != 0)) {
if ((StriCmp(TokenList[0], L"loader") == 0) && (TokenCount > 1)) { // set the boot loader filename
while (((TokenCount = ReadTokenLine(File, &TokenList)) > 0) && (StriCmp(TokenList[0], L"}") != 0)) {
if ((StriCmp(TokenList[0], L"loader") == 0) && (TokenCount > 1)) { // set the boot loader filename
SubEntry->LoaderPath = StrDuplicate(TokenList[1]);
SubEntry->DevicePath = FileDevicePath(Volume->DeviceHandle, SubEntry->LoaderPath);
} else if (StriCmp(TokenList[0], L"initrd") == 0) {
SubEntry->LoaderPath = StrDuplicate(TokenList[1]);
SubEntry->DevicePath = FileDevicePath(Volume->DeviceHandle, SubEntry->LoaderPath);
} else if (StriCmp(TokenList[0], L"initrd") == 0) {
SubEntry->InitrdPath = NULL;
if (TokenCount > 1) {
SubEntry->InitrdPath = StrDuplicate(TokenList[1]);
}
} else if (StriCmp(TokenList[0], L"options") == 0) {
SubEntry->InitrdPath = NULL;
if (TokenCount > 1) {
SubEntry->InitrdPath = StrDuplicate(TokenList[1]);
}
} else if (StriCmp(TokenList[0], L"options") == 0) {
if (SubEntry->InitrdPath != NULL) {
MergeStrings(&SubEntry->LoadOptions, L"initrd=", L' ');
MergeStrings(&SubEntry->LoadOptions, SubEntry->InitrdPath, 0);
if (SubEntry->InitrdPath != NULL) {
MergeStrings(&SubEntry->LoadOptions, L"initrd=", L' ');
MergeStrings(&SubEntry->LoadOptions, SubEntry->InitrdPath, 0);
Entry->LoaderPath = StrDuplicate(TokenList[1]);
Entry->DevicePath = FileDevicePath(CurrentVolume->DeviceHandle, Entry->LoaderPath);
SetLoaderDefaults(Entry, TokenList[1], CurrentVolume);
Entry->LoaderPath = StrDuplicate(TokenList[1]);
Entry->DevicePath = FileDevicePath(CurrentVolume->DeviceHandle, Entry->LoaderPath);
SetLoaderDefaults(Entry, TokenList[1], CurrentVolume);
Entry->LoadOptions = NULL; // Discard default options, if any
DefaultsSet = TRUE;
} else if ((StriCmp(TokenList[0], L"volume") == 0) && (TokenCount > 1)) {
if (FindVolume(&CurrentVolume, TokenList[1])) {
Entry->LoadOptions = NULL; // Discard default options, if any
DefaultsSet = TRUE;
} else if ((StriCmp(TokenList[0], L"volume") == 0) && (TokenCount > 1)) {
if (FindVolume(&CurrentVolume, TokenList[1])) {
Entry->me.Title = AllocateZeroPool(256 * sizeof(CHAR16));
SPrint(Entry->me.Title, 255, L"Boot %s from %s", (Title != NULL) ? Title : L"Unknown", CurrentVolume->VolName);
Entry->me.BadgeImage = CurrentVolume->VolBadgeImage;
Entry->VolName = CurrentVolume->VolName;
} // if match found
} else if ((StriCmp(TokenList[0], L"icon") == 0) && (TokenCount > 1)) {
Entry->me.Title = AllocateZeroPool(256 * sizeof(CHAR16));
SPrint(Entry->me.Title, 255, L"Boot %s from %s", (Title != NULL) ? Title : L"Unknown", CurrentVolume->VolName);
Entry->me.BadgeImage = CurrentVolume->VolBadgeImage;
Entry->VolName = CurrentVolume->VolName;
} // if match found
} else if ((StriCmp(TokenList[0], L"icon") == 0) && (TokenCount > 1)) {
Entry->me.Image = LoadIcns(CurrentVolume->RootDir, TokenList[1], 128);
if (Entry->me.Image == NULL) {
Entry->me.Image = DummyImage(128);
}
} else if ((StriCmp(TokenList[0], L"initrd") == 0) && (TokenCount > 1)) {
Entry->me.Image = LoadIcns(CurrentVolume->RootDir, TokenList[1], 128);
if (Entry->me.Image == NULL) {
Entry->me.Image = DummyImage(128);
}
} else if ((StriCmp(TokenList[0], L"initrd") == 0) && (TokenCount > 1)) {
Entry->InitrdPath = StrDuplicate(TokenList[1]);
} else if ((StriCmp(TokenList[0], L"options") == 0) && (TokenCount > 1)) {
Entry->InitrdPath = StrDuplicate(TokenList[1]);
} else if ((StriCmp(TokenList[0], L"options") == 0) && (TokenCount > 1)) {
Entry->LoadOptions = StrDuplicate(TokenList[1]);
} else if ((StriCmp(TokenList[0], L"ostype") == 0) && (TokenCount > 1)) {
if (TokenCount > 1) {
Entry->LoadOptions = StrDuplicate(TokenList[1]);
} else if ((StriCmp(TokenList[0], L"ostype") == 0) && (TokenCount > 1)) {
if (TokenCount > 1) {
if (Entry->InitrdPath) {
MergeStrings(&Entry->LoadOptions, L"initrd=", L' ');
MergeStrings(&Entry->LoadOptions, Entry->InitrdPath, 0);
if (Entry->InitrdPath) {
MergeStrings(&Entry->LoadOptions, L"initrd=", L' ');
MergeStrings(&Entry->LoadOptions, Entry->InitrdPath, 0);
GenerateSubScreen(Entry, Volume);
AddPreparedLoaderEntry(Entry);
} else {
GenerateSubScreen(Entry, Volume);
AddPreparedLoaderEntry(Entry);
} else {
- if (OptionsFilename != NULL)
- FreePool(OptionsFilename);
- if (FullFilename != NULL)
- FreePool(FullFilename);
+ MyFreePool(OptionsFilename);
+ MyFreePool(FullFilename);
Options = StrDuplicate(TokenList[1]);
FreeTokenLine(&TokenList, &TokenCount);
FreePool(File);
Options = StrDuplicate(TokenList[1]);
FreeTokenLine(&TokenList, &TokenCount);
FreePool(File);