[MMIXER] Fix additional data size initialization for different audio formats (#6753)
[reactos.git] / boot / freeldr / freeldr / lib / inifile / ini_init.c
1 /*
2 * FreeLoader
3 * Copyright (C) 2009 Hervé Poussineau <hpoussin@reactos.org>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #include <freeldr.h>
21
22 #include <debug.h>
23 DBG_DEFAULT_CHANNEL(INIFILE);
24
25 BOOLEAN IniFileInitialize(VOID)
26 {
27 FILEINFORMATION FileInformation;
28 ULONG FileId; // File handle for freeldr.ini
29 PCHAR FreeLoaderIniFileData;
30 ULONG FreeLoaderIniFileSize, Count;
31 ARC_STATUS Status;
32 BOOLEAN Success;
33
34 TRACE("IniFileInitialize()\n");
35
36 /* Try to open freeldr.ini */
37 Status = FsOpenFile("freeldr.ini", FrLdrBootPath, OpenReadOnly, &FileId);
38 if (Status != ESUCCESS)
39 {
40 ERR("Error while opening freeldr.ini, Status: %d\n", Status);
41 UiMessageBoxCritical("Error opening freeldr.ini or file not found.\nYou need to re-install FreeLoader.");
42 return FALSE;
43 }
44
45 /* Get the file size */
46 Status = ArcGetFileInformation(FileId, &FileInformation);
47 if (Status != ESUCCESS || FileInformation.EndingAddress.HighPart != 0)
48 {
49 UiMessageBoxCritical("Error while getting informations about freeldr.ini.\nYou need to re-install FreeLoader.");
50 ArcClose(FileId);
51 return FALSE;
52 }
53 FreeLoaderIniFileSize = FileInformation.EndingAddress.LowPart;
54
55 /* Allocate memory to cache the whole freeldr.ini */
56 FreeLoaderIniFileData = FrLdrTempAlloc(FreeLoaderIniFileSize, TAG_INI_FILE);
57 if (!FreeLoaderIniFileData)
58 {
59 UiMessageBoxCritical("Out of memory while loading freeldr.ini.");
60 ArcClose(FileId);
61 return FALSE;
62 }
63
64 /* Load freeldr.ini from the disk */
65 Status = ArcRead(FileId, FreeLoaderIniFileData, FreeLoaderIniFileSize, &Count);
66 if (Status != ESUCCESS || Count != FreeLoaderIniFileSize)
67 {
68 ERR("Error while reading freeldr.ini, Status: %d\n", Status);
69 UiMessageBoxCritical("Error while reading freeldr.ini.");
70 ArcClose(FileId);
71 FrLdrTempFree(FreeLoaderIniFileData, TAG_INI_FILE);
72 return FALSE;
73 }
74
75 /* Parse the .ini file data */
76 Success = IniParseFile(FreeLoaderIniFileData, FreeLoaderIniFileSize);
77
78 /* Do some cleanup, and return */
79 ArcClose(FileId);
80 FrLdrTempFree(FreeLoaderIniFileData, TAG_INI_FILE);
81
82 return Success;
83 }