diff --git a/reactos/boot/freeldr/freeldr/include/inifile.h b/reactos/boot/freeldr/freeldr/include/inifile.h index a36d4577685..af737031a92 100644 --- a/reactos/boot/freeldr/freeldr/include/inifile.h +++ b/reactos/boot/freeldr/freeldr/include/inifile.h @@ -54,8 +54,6 @@ extern BOOLEAN IniFileSectionInitialized; extern ULONG IniFileSectionCount; extern ULONG IniFileSettingCount; -PFILE IniOpenIniFile(); - BOOLEAN IniParseFile(PCHAR IniFileData, ULONG IniFileSize); ULONG IniGetNextLineSize(PCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOffset); ULONG IniGetNextLine(PCHAR IniFileData, ULONG IniFileSize, PCHAR Buffer, ULONG BufferSize, ULONG CurrentOffset); diff --git a/reactos/boot/freeldr/freeldr/inifile/ini_init.c b/reactos/boot/freeldr/freeldr/inifile/ini_init.c index b5892a15f40..6e5fdfca978 100644 --- a/reactos/boot/freeldr/freeldr/inifile/ini_init.c +++ b/reactos/boot/freeldr/freeldr/inifile/ini_init.c @@ -1,6 +1,6 @@ /* * FreeLoader - * Copyright (C) 1998-2003 Brian Palmer + * Copyright (C) 2009 Hervé Poussineau * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,58 +19,86 @@ #include +static LONG IniOpenIniFile(ULONG* FileId) +{ + CHAR FreeldrPath[MAX_PATH]; + LONG ret; + + // + // Create full freeldr.ini path + // + MachDiskGetBootPath(FreeldrPath, sizeof(FreeldrPath)); + strcat(FreeldrPath, "\\freeldr.ini"); + + // Try to open freeldr.ini + ret = ArcOpen(FreeldrPath, OpenReadOnly, FileId); + + return ret; +} + BOOLEAN IniFileInitialize(VOID) { - PFILE Freeldr_Ini; // File handle for freeldr.ini - PCHAR FreeLoaderIniFileData; - ULONG FreeLoaderIniFileSize; - BOOLEAN Success; + FILEINFORMATION FileInformation; + ULONG FileId; // File handle for freeldr.ini + PCHAR FreeLoaderIniFileData; + ULONG FreeLoaderIniFileSize, Count; + LONG ret; + BOOLEAN Success; + // // Open freeldr.ini - Freeldr_Ini = IniOpenIniFile(); - - if (Freeldr_Ini == NULL) + // + ret = IniOpenIniFile(&FileId); + if (ret != ESUCCESS) { UiMessageBoxCritical("Error opening freeldr.ini or file not found.\nYou need to re-install FreeLoader."); return FALSE; } - // Get the file size & allocate enough memory for it - FreeLoaderIniFileSize = FsGetFileSize(Freeldr_Ini); - FreeLoaderIniFileData = MmHeapAlloc(FreeLoaderIniFileSize); + // + // Get the file size + // + ret = ArcGetFileInformation(FileId, &FileInformation); + if (ret != ESUCCESS || FileInformation.EndingAddress.HighPart != 0) + { + UiMessageBoxCritical("Error while getting informations about freeldr.ini.\nYou need to re-install FreeLoader."); + return FALSE; + } + FreeLoaderIniFileSize = FileInformation.EndingAddress.LowPart; - // If we are out of memory then return FALSE - if (FreeLoaderIniFileData == NULL) + // + // Allocate memory to cache the whole freeldr.ini + // + FreeLoaderIniFileData = MmHeapAlloc(FreeLoaderIniFileSize); + if (!FreeLoaderIniFileData) { UiMessageBoxCritical("Out of memory while loading freeldr.ini."); - FsCloseFile(Freeldr_Ini); + ArcClose(FileId); return FALSE; } + // // Read freeldr.ini off the disk - if (!FsReadFile(Freeldr_Ini, FreeLoaderIniFileSize, NULL, FreeLoaderIniFileData)) + // + ret = ArcRead(FileId, FreeLoaderIniFileData, FreeLoaderIniFileSize, &Count); + if (ret != ESUCCESS || Count != FreeLoaderIniFileSize) { - FsCloseFile(Freeldr_Ini); + UiMessageBoxCritical("Error while reading freeldr.ini."); + ArcClose(FileId); MmHeapFree(FreeLoaderIniFileData); return FALSE; } - FsCloseFile(Freeldr_Ini); - + // // Parse the .ini file data + // Success = IniParseFile(FreeLoaderIniFileData, FreeLoaderIniFileSize); + // + // Do some cleanup, and return + // + ArcClose(FileId); MmHeapFree(FreeLoaderIniFileData); return Success; } - -PFILE IniOpenIniFile() -{ - PFILE IniFileHandle; // File handle for freeldr.ini - - // Try to open freeldr.ini - IniFileHandle = FsOpenFile("freeldr.ini"); - - return IniFileHandle; -}