Legends-of-Azeroth-Pandaria-5.4.8
85 строк · 2.1 Кб
1/*
2* Copyright (C) 2011-2016 Project SkyFire <http://www.projectskyfire.org/>
3* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
4* Copyright (C) 2005-2016 MaNGOS <http://getmangos.com/>
5*
6* This program is free software; you can redistribute it and/or modify it
7* under the terms of the GNU General Public License as published by the
8* Free Software Foundation; either version 3 of the License, or (at your
9* option) any later version.
10*
11* This program is distributed in the hope that it will be useful, but WITHOUT
12* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14* more details.
15*
16* You should have received a copy of the GNU General Public License along
17* with this program. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#define _CRT_SECURE_NO_DEPRECATE
21
22#include "loadlib.h"
23#include <cstdio>
24
25u_map_fcc MverMagic = { {'R','E','V','M'} };
26
27FileLoader::FileLoader()
28{
29data = 0;
30data_size = 0;
31version = 0;
32}
33
34FileLoader::~FileLoader()
35{
36free();
37}
38
39bool FileLoader::loadFile(HANDLE mpq, char* filename, bool log)
40{
41free();
42HANDLE file;
43if (!SFileOpenFileEx(mpq, filename, SFILE_OPEN_PATCHED_FILE, &file))
44{
45if (log)
46printf("No such file %s\n", filename);
47return false;
48}
49
50data_size = SFileGetFileSize(file, NULL);
51data = new uint8[data_size];
52if (data)
53{
54SFileReadFile(file, data, data_size, NULL/*bytesRead*/, NULL);
55if (prepareLoadedData())
56{
57SFileCloseFile(file);
58return true;
59}
60}
61
62printf("Error loading %s\n", filename);
63SFileCloseFile(file);
64free();
65return false;
66}
67
68bool FileLoader::prepareLoadedData()
69{
70// Check version
71version = reinterpret_cast<file_MVER*>(data);
72if (version->fcc != MverMagic.fcc)
73return false;
74if (version->ver != FILE_FORMAT_VERSION)
75return false;
76return true;
77}
78
79void FileLoader::free()
80{
81if (data) delete[] data;
82data = 0;
83data_size = 0;
84version = 0;
85}
86