1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 | //
// This file is part of the aMule Project.
//
// Copyright (c) 2010-2011 aMule Team ( admin@amule.org / http://www.amule.org )
//
// Any parts of this program derived from the xMule, lMule or eMule project,
// or contributed by third-party developers are copyrighted by their
// respective authors.
//
// 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
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
//
#include "CanceledFileList.h" // Interface declarations
#include <common/DataFileVersion.h>
#include "Preferences.h"
#include "CFile.h"
#include "Logger.h"
#include <common/Format.h>
CCanceledFileList::CCanceledFileList()
{
m_filename = wxT("canceled.met");<--- Variable 'm_filename' is assigned in constructor body. Consider performing initialization in initialization list. [+]When an object of a class is created, the constructors of all member variables are called consecutively in the order the variables are declared, even if you don't explicitly write them to the initialization list. You could avoid assigning 'm_filename' a value by passing the value to the constructor in the initialization list.
Init();
}
bool CCanceledFileList::Init()
{
CFile file;
CPath fullpath = CPath(thePrefs::GetConfigDir() + m_filename);
if (!fullpath.FileExists()) {
// This is perfectly normal. The file was probably either
// deleted, or this is the first time running aMule.
return false;
}
if (!file.Open(fullpath)) {
AddLogLineC(CFormat(_("WARNING: %s cannot be opened.")) % m_filename);
return false;
}
try {
uint8 version = file.ReadUInt8();
if (version != CANCELEDFILE_VERSION) {
AddLogLineC(_("WARNING: Canceled file list corrupted, contains invalid header."));
return false;
}
uint32 RecordsNumber = file.ReadUInt32();
AddDebugLogLineN(logKnownFiles,
CFormat(wxT("Reading %i canceled files from file format 0x%02x."))
% RecordsNumber % version);
for (uint32 i = 0; i < RecordsNumber; i++) {
CMD4Hash hash;
file.Read(hash.GetHash(), 16);
AddDebugLogLineN(logKnownFiles, CFormat(wxT("Canceled file read: %s")) % hash.Encode());
if (!hash.IsEmpty()) {
m_canceledFileList.insert(hash);
}
}
AddDebugLogLineN(logKnownFiles, wxT("Finished reading canceled files"));
return true;
} catch (const CSafeIOException& e) {
AddLogLineC(CFormat(_("IO error while reading %s file: %s")) % m_filename % e.what());
}
return false;
}
void CCanceledFileList::Save()
{
CFile file(thePrefs::GetConfigDir() + m_filename, CFile::write);
if (!file.IsOpened()) {
return;
}
try {
file.WriteUInt8(CANCELEDFILE_VERSION);
file.WriteUInt32(m_canceledFileList.size());
CanceledFileList::iterator it = m_canceledFileList.begin();
for (; it != m_canceledFileList.end(); ++it) {
file.Write(it->GetHash(), 16);
}
} catch (const CIOFailureException& e) {
AddLogLineC(CFormat(_("Error while saving %s file: %s")) % m_filename % e.what());
}
}
bool CCanceledFileList::IsCanceledFile(const CMD4Hash& hash) const
{
return !hash.IsEmpty() && m_canceledFileList.find(hash) != m_canceledFileList.end();
}
bool CCanceledFileList::Add(const CMD4Hash& hash)
{
return m_canceledFileList.insert(hash).second;
}
bool CCanceledFileList::Remove(const CMD4Hash& hash)
{
return m_canceledFileList.erase(hash) > 0;
}
// File_checked_for_headers
|