Legends-of-Azeroth-Pandaria-5.4.8

Форк
0
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

25
u_map_fcc MverMagic = { {'R','E','V','M'} };
26

27
FileLoader::FileLoader()
28
{
29
    data = 0;
30
    data_size = 0;
31
    version = 0;
32
}
33

34
FileLoader::~FileLoader()
35
{
36
    free();
37
}
38

39
bool FileLoader::loadFile(HANDLE mpq, char* filename, bool log)
40
{
41
    free();
42
    HANDLE file;
43
    if (!SFileOpenFileEx(mpq, filename, SFILE_OPEN_PATCHED_FILE, &file))
44
    {
45
        if (log)
46
            printf("No such file %s\n", filename);
47
        return false;
48
    }
49

50
    data_size = SFileGetFileSize(file, NULL);
51
    data = new uint8[data_size];
52
    if (data)
53
    {
54
        SFileReadFile(file, data, data_size, NULL/*bytesRead*/, NULL);
55
        if (prepareLoadedData())
56
        {
57
            SFileCloseFile(file);
58
            return true;
59
        }
60
    }
61

62
    printf("Error loading %s\n", filename);
63
    SFileCloseFile(file);
64
    free();
65
    return false;
66
}
67

68
bool FileLoader::prepareLoadedData()
69
{
70
    // Check version
71
    version = reinterpret_cast<file_MVER*>(data);
72
    if (version->fcc != MverMagic.fcc)
73
        return false;
74
    if (version->ver != FILE_FORMAT_VERSION)
75
        return false;
76
    return true;
77
}
78

79
void FileLoader::free()
80
{
81
    if (data) delete[] data;
82
    data = 0;
83
    data_size = 0;
84
    version = 0;
85
}
86

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.