fix: sonarcloud warnings / code smells (#2242)
* fix: use-init-statement Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX1f6EvHJiycnfA7gfrG\&open\=AX1f6EvHJiycnfA7gfrG * fix replace-use-of-new warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX1ZNs41ZmlvCveKTzon\&open\=AX1ZNs41ZmlvCveKTzon * fix has-virtual-functions-but-non-virtual-destructor warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX1ZNs72ZmlvCveKTzo6\&open\=AX1ZNs72ZmlvCveKTzo6 * fix make-variable-const warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX0_a_OVNJn7rAzml_7B\&open\=AX0_a_OVNJn7rAzml_7B * fix remove-redundant-static-specifiers Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06St-81usi2gyYkPTb\&open\=AX06St-81usi2gyYkPTb * fix function-should-be-declared-const Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06St-81usi2gyYkPTd\&open\=AX06St-81usi2gyYkPTd * fix use-init-statement warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06St-81usi2gyYkPTc\&open\=AX06St-81usi2gyYkPTc * fix class-has-virtual-functions-but-non-virtual-destructor warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06Stz41usi2gyYkPTS\&open\=AX06Stz41usi2gyYkPTS * fix remove-commented-out-code warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06St241usi2gyYkPTT\&open\=AX06St241usi2gyYkPTT * fix remove-commented-out-code warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06St241usi2gyYkPTV\&open\=AX06St241usi2gyYkPTV * fix has-virtual-functions-but-non-virtual-destructor warning https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06St241usi2gyYkPTW\&open\=AX06St241usi2gyYkPTW * fix remove-commented-out-code warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX06SuCA1usi2gyYkPTh\&open\=AX06SuCA1usi2gyYkPTh * fix use-init-statement warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX0rAQvnfJ-O-YIDS9xF\&open\=AX0rAQvnfJ-O-YIDS9xF * fix use-init-statement warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX0rAQvnfJ-O-YIDS9xG\&open\=AX0rAQvnfJ-O-YIDS9xG * fix remove-redundant-access-specifier warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX1ZNs5tZmlvCveKTzor\&open\=AX1ZNs5tZmlvCveKTzor * fix use-init-statement warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX01Itl7f_SST5i7BN1l\&open\=AX01Itl7f_SST5i7BN1l * fix use-init-statement warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX0wDijI2l89lDvp1C9P\&open\=AX0wDijI2l89lDvp1C9P * fix use-automatically-managed-memory-instead-of-new warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX1f6E6HJiycnfA7gfrI\&open\=AX1f6E6HJiycnfA7gfrI * fix use-init-statement warning Xref: https://sonarcloud.io/project/issues\?id\=transmission_transmission\&issues\=AX0l8vknEafnvRiIHUEv\&open\=AX0l8vknEafnvRiIHUEv * fixup! fix has-virtual-functions-but-non-virtual-destructor warning
This commit is contained in:
parent
d3c3058f16
commit
f6f0db75e1
|
@ -813,9 +813,7 @@ void Application::Impl::on_drag_data_received(
|
|||
guint /*info*/,
|
||||
guint time_)
|
||||
{
|
||||
auto const uris = selection_data.get_uris();
|
||||
|
||||
if (!uris.empty())
|
||||
if (auto const uris = selection_data.get_uris(); !uris.empty())
|
||||
{
|
||||
auto files = std::vector<Glib::RefPtr<Gio::File>>();
|
||||
files.reserve(uris.size());
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "transmission.h"
|
||||
|
@ -134,13 +135,12 @@ std::vector<uint8_t> tr_completion::createPieceBitfield() const
|
|||
size_t const n = block_info_->n_pieces;
|
||||
auto pieces = tr_bitfield{ n };
|
||||
|
||||
bool* const flags = new bool[n];
|
||||
auto flags = std::make_unique<bool[]>(n);
|
||||
for (tr_piece_index_t piece = 0; piece < n; ++piece)
|
||||
{
|
||||
flags[piece] = hasPiece(piece);
|
||||
}
|
||||
pieces.setFromBools(flags, n);
|
||||
delete[] flags;
|
||||
pieces.setFromBools(flags.get(), n);
|
||||
|
||||
return pieces.raw();
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ struct tr_completion
|
|||
struct torrent_view
|
||||
{
|
||||
virtual bool pieceIsDnd(tr_piece_index_t piece) const = 0;
|
||||
|
||||
virtual ~torrent_view() = default;
|
||||
};
|
||||
|
||||
explicit tr_completion(torrent_view const* tor, tr_block_info const* block_info)
|
||||
|
|
|
@ -195,7 +195,7 @@ static void canReadWrapper(tr_peerIo* io)
|
|||
|
||||
tr_peerIoRef(io);
|
||||
|
||||
tr_session* const session = io->session;
|
||||
tr_session const* const session = io->session;
|
||||
|
||||
/* try to consume the input buffer */
|
||||
if (io->canRead != nullptr)
|
||||
|
|
|
@ -102,7 +102,7 @@ std::vector<Candidate> getCandidates(Wishlist::PeerInfo const& peer_info)
|
|||
return candidates;
|
||||
}
|
||||
|
||||
static std::vector<tr_block_span_t> makeSpans(tr_block_index_t const* sorted_blocks, size_t n_blocks)
|
||||
std::vector<tr_block_span_t> makeSpans(tr_block_index_t const* sorted_blocks, size_t n_blocks)
|
||||
{
|
||||
if (n_blocks == 0)
|
||||
{
|
||||
|
@ -130,7 +130,7 @@ static std::vector<tr_block_span_t> makeSpans(tr_block_index_t const* sorted_blo
|
|||
|
||||
} // namespace
|
||||
|
||||
std::vector<tr_block_span_t> Wishlist::next(Wishlist::PeerInfo const& peer_info, size_t n_wanted_blocks)
|
||||
std::vector<tr_block_span_t> Wishlist::next(Wishlist::PeerInfo const& peer_info, size_t n_wanted_blocks) const
|
||||
{
|
||||
size_t n_blocks = 0;
|
||||
auto spans = std::vector<tr_block_span_t>{};
|
||||
|
@ -167,8 +167,7 @@ std::vector<tr_block_span_t> Wishlist::next(Wishlist::PeerInfo const& peer_info,
|
|||
|
||||
// don't request from too many peers
|
||||
size_t const n_peers = peer_info.countActiveRequests(block);
|
||||
size_t const max_peers = peer_info.isEndgame() ? 2 : 1;
|
||||
if (n_peers >= max_peers)
|
||||
if (size_t const max_peers = peer_info.isEndgame() ? 2 : 1; n_peers >= max_peers)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -31,8 +31,9 @@ public:
|
|||
virtual tr_block_span_t blockSpan(tr_piece_index_t) const = 0;
|
||||
virtual tr_piece_index_t countAllPieces() const = 0;
|
||||
virtual tr_priority_t priority(tr_piece_index_t) const = 0;
|
||||
virtual ~PeerInfo() = default;
|
||||
};
|
||||
|
||||
// get a list of the next blocks that we should request from a peer
|
||||
std::vector<tr_block_span_t> next(PeerInfo const& peer_info, size_t n_wanted_blocks);
|
||||
std::vector<tr_block_span_t> next(PeerInfo const& peer_info, size_t n_wanted_blocks) const;
|
||||
};
|
||||
|
|
|
@ -506,8 +506,8 @@ void tr_peerMgrSetUtpFailed(tr_torrent* tor, tr_address const* addr, bool failed
|
|||
***
|
||||
*** 1. tr_swarm::active_requests, an opaque class that tracks what requests
|
||||
*** we currently have, i.e. which blocks and from which peers.
|
||||
*** This is used for (a) cancelling requests that have been waiting
|
||||
*** for too long and (b) avoiding duplicate requests.
|
||||
*** This is used for cancelling requests that have been waiting
|
||||
*** for too long and avoiding duplicate requests.
|
||||
***
|
||||
*** 2. tr_swarm::pieces, an array of "struct weighted_piece" which lists the
|
||||
*** pieces that we want to request. It's used to decide which blocks to
|
||||
|
@ -541,7 +541,6 @@ static int countActiveWebseeds(tr_swarm* s)
|
|||
// TODO: if we keep this, add equivalent API to ActiveRequest
|
||||
void tr_peerMgrClientSentRequests(tr_torrent* torrent, tr_peer* peer, tr_block_span_t span)
|
||||
{
|
||||
// std::cout << __FILE__ << ':' << __LINE__ << " tr_peerMgrClientSentRequests [" << range.begin << "..." << range.end << ')' << std::endl;
|
||||
auto const now = tr_time();
|
||||
|
||||
for (tr_block_index_t block = span.begin; block < span.end; ++block)
|
||||
|
@ -569,6 +568,8 @@ std::vector<tr_block_span_t> tr_peerMgrGetNextRequests(tr_torrent* torrent, tr_p
|
|||
{
|
||||
}
|
||||
|
||||
~PeerInfoImpl() override = default;
|
||||
|
||||
bool clientCanRequestBlock(tr_block_index_t block) const override
|
||||
{
|
||||
return !torrent_->hasBlock(block) && !swarm_->active_requests.has(block, peer_);
|
||||
|
|
|
@ -2085,7 +2085,6 @@ static void updateBlockRequests(tr_peerMsgsImpl* msgs)
|
|||
TR_ASSERT(msgs->is_client_interested());
|
||||
TR_ASSERT(!msgs->is_client_choked());
|
||||
|
||||
// std::cout << __FILE__ << ':' << __LINE__ << " wants " << n_wanted << " blocks to request" << std::endl;
|
||||
for (auto const span : tr_peerMgrGetNextRequests(msgs->torrent, msgs, n_wanted))
|
||||
{
|
||||
for (tr_block_index_t block = span.begin; block < span.end; ++block)
|
||||
|
@ -2093,7 +2092,6 @@ static void updateBlockRequests(tr_peerMsgsImpl* msgs)
|
|||
protocolSendRequest(msgs, blockToReq(msgs->torrent, block));
|
||||
}
|
||||
|
||||
// std::cout << __FILE__ << ':' << __LINE__ << " peer " << (void*)msgs << " requested " << span.end - span.begin << " blocks" << std::endl;
|
||||
tr_peerMgrClientSentRequests(msgs->torrent, msgs, span);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -131,8 +131,7 @@ int tr_ctorSetMetainfoFromFile(tr_ctor* ctor, char const* filename)
|
|||
return EILSEQ;
|
||||
}
|
||||
|
||||
int const err = parseMetainfoContents(ctor);
|
||||
if (err)
|
||||
if (int const err = parseMetainfoContents(ctor); err != 0)
|
||||
{
|
||||
clearMetainfo(ctor);
|
||||
return err;
|
||||
|
@ -141,9 +140,7 @@ int tr_ctorSetMetainfoFromFile(tr_ctor* ctor, char const* filename)
|
|||
setSourceFile(ctor, filename);
|
||||
|
||||
/* if no `name' field was set, then set it from the filename */
|
||||
tr_variant* info = nullptr;
|
||||
|
||||
if (tr_variantDictFindDict(&ctor->metainfo, TR_KEY_info, &info))
|
||||
if (tr_variant* info = nullptr; tr_variantDictFindDict(&ctor->metainfo, TR_KEY_info, &info))
|
||||
{
|
||||
auto name = std::string_view{};
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
|
||||
#include <algorithm> /* EINVAL */
|
||||
#include <array>
|
||||
#include <cerrno> /* EINVAL */
|
||||
#include <climits> /* INT_MAX */
|
||||
#include <cmath>
|
||||
|
@ -1932,7 +1933,7 @@ static void torrentCallScript(tr_torrent const* tor, char const* script)
|
|||
|
||||
char* const torrent_dir = tr_sys_path_native_separators(tr_strdup(tor->currentDir));
|
||||
|
||||
char const* const cmd[] = {
|
||||
auto const cmd = std::array<char const*, 2>{
|
||||
script,
|
||||
nullptr,
|
||||
};
|
||||
|
@ -1952,7 +1953,7 @@ static void torrentCallScript(tr_torrent const* tor, char const* script)
|
|||
|
||||
tr_error* error = nullptr;
|
||||
|
||||
if (!tr_spawn_async(cmd, env, TR_IF_WIN32("\\", "/"), &error))
|
||||
if (!tr_spawn_async(std::data(cmd), env, TR_IF_WIN32("\\", "/"), &error))
|
||||
{
|
||||
tr_logAddTorErr(tor, "Error executing script \"%s\" (%d): %s", script, error->code, error->message);
|
||||
tr_error_free(error);
|
||||
|
|
|
@ -134,7 +134,7 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
virtual ~tr_torrent() = default;
|
||||
virtual ~tr_torrent() override = default;
|
||||
|
||||
void setLocation(
|
||||
std::string_view location,
|
||||
|
@ -161,7 +161,6 @@ public:
|
|||
// private:
|
||||
void swapMetainfo(tr_metainfo_parsed& parsed);
|
||||
|
||||
public:
|
||||
auto unique_lock() const
|
||||
{
|
||||
return session->unique_lock();
|
||||
|
@ -337,7 +336,6 @@ public:
|
|||
|
||||
std::optional<tr_found_file_t> findFile(std::string& filename, tr_file_index_t i) const;
|
||||
|
||||
public:
|
||||
tr_info info = {};
|
||||
|
||||
tr_bitfield dnd_pieces_ = tr_bitfield{ 0 };
|
||||
|
|
|
@ -365,8 +365,7 @@ int tr_dhtInit(tr_session* ss)
|
|||
tr_rand_buffer(myid, 20);
|
||||
}
|
||||
|
||||
int rc = dht_init(ss->udp_socket, ss->udp6_socket, myid, nullptr);
|
||||
if (rc < 0)
|
||||
if (int rc = dht_init(ss->udp_socket, ss->udp6_socket, myid, nullptr); rc < 0)
|
||||
{
|
||||
tr_free(nodes6);
|
||||
tr_free(nodes);
|
||||
|
|
|
@ -186,50 +186,43 @@ int tr_variantParseBenc(tr_variant& top, int parse_opts, std::string_view benc,
|
|||
break;
|
||||
}
|
||||
|
||||
tr_variant* const v = get_node(stack, key, &top, &err);
|
||||
if (v != nullptr)
|
||||
if (tr_variant* const v = get_node(stack, key, &top, &err); v != nullptr)
|
||||
{
|
||||
tr_variantInitInt(v, *value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'l': // list
|
||||
{
|
||||
benc.remove_prefix(1);
|
||||
benc.remove_prefix(1);
|
||||
|
||||
tr_variant* const v = get_node(stack, key, &top, &err);
|
||||
if (v != nullptr)
|
||||
{
|
||||
tr_variantInitList(v, 0);
|
||||
stack.push_back(v);
|
||||
}
|
||||
break;
|
||||
if (tr_variant* const v = get_node(stack, key, &top, &err); v != nullptr)
|
||||
{
|
||||
tr_variantInitList(v, 0);
|
||||
stack.push_back(v);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'd': // dict
|
||||
{
|
||||
benc.remove_prefix(1);
|
||||
benc.remove_prefix(1);
|
||||
|
||||
tr_variant* const v = get_node(stack, key, &top, &err);
|
||||
if (v != nullptr)
|
||||
{
|
||||
tr_variantInitDict(v, 0);
|
||||
stack.push_back(v);
|
||||
}
|
||||
break;
|
||||
if (tr_variant* const v = get_node(stack, key, &top, &err); v != nullptr)
|
||||
{
|
||||
tr_variantInitDict(v, 0);
|
||||
stack.push_back(v);
|
||||
}
|
||||
break;
|
||||
case 'e': // end of list or dict
|
||||
benc.remove_prefix(1);
|
||||
|
||||
if (std::empty(stack) || key)
|
||||
{
|
||||
benc.remove_prefix(1);
|
||||
|
||||
if (std::empty(stack) || key)
|
||||
{
|
||||
err = EILSEQ;
|
||||
break;
|
||||
}
|
||||
|
||||
stack.pop_back();
|
||||
err = EILSEQ;
|
||||
break;
|
||||
}
|
||||
|
||||
stack.pop_back();
|
||||
break;
|
||||
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
|
|
|
@ -92,7 +92,7 @@ public:
|
|||
|
||||
FileTreeModel::FileTreeModel(QObject* parent, bool is_editable)
|
||||
: QAbstractItemModel{ parent }
|
||||
, root_item_{ new FileTreeItem }
|
||||
, root_item_{ std::make_unique<FileTreeItem>() }
|
||||
, is_editable_{ is_editable }
|
||||
{
|
||||
}
|
||||
|
@ -100,8 +100,6 @@ FileTreeModel::FileTreeModel(QObject* parent, bool is_editable)
|
|||
FileTreeModel::~FileTreeModel()
|
||||
{
|
||||
clear();
|
||||
|
||||
delete root_item_;
|
||||
}
|
||||
|
||||
void FileTreeModel::setEditable(bool is_editable)
|
||||
|
@ -233,7 +231,7 @@ QModelIndex FileTreeModel::index(int row, int column, QModelIndex const& parent)
|
|||
|
||||
if (!parent.isValid())
|
||||
{
|
||||
parent_item = root_item_;
|
||||
parent_item = root_item_.get();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -270,7 +268,7 @@ QModelIndex FileTreeModel::parent(QModelIndex const& child, int column) const
|
|||
|
||||
int FileTreeModel::rowCount(QModelIndex const& parent) const
|
||||
{
|
||||
FileTreeItem const* parent_item = parent.isValid() ? itemFromIndex(parent) : root_item_;
|
||||
FileTreeItem const* parent_item = parent.isValid() ? itemFromIndex(parent) : root_item_.get();
|
||||
|
||||
return parent_item->childCount();
|
||||
}
|
||||
|
@ -284,7 +282,7 @@ int FileTreeModel::columnCount(QModelIndex const& parent) const
|
|||
|
||||
QModelIndex FileTreeModel::indexOf(FileTreeItem* item, int column) const
|
||||
{
|
||||
if (item == nullptr || item == root_item_)
|
||||
if (item == nullptr || item == root_item_.get())
|
||||
{
|
||||
return QModelIndex();
|
||||
}
|
||||
|
@ -320,8 +318,7 @@ void FileTreeModel::clear()
|
|||
{
|
||||
beginResetModel();
|
||||
clearSubtree(QModelIndex());
|
||||
delete root_item_;
|
||||
root_item_ = new FileTreeItem{};
|
||||
root_item_ = std::make_unique<FileTreeItem>();
|
||||
endResetModel();
|
||||
|
||||
assert(index_cache_.isEmpty());
|
||||
|
@ -368,7 +365,7 @@ void FileTreeModel::addFile(
|
|||
item = item->parent();
|
||||
}
|
||||
|
||||
assert(item == root_item_);
|
||||
assert(item == root_item_.get());
|
||||
|
||||
if (index_with_changed_parents.isValid())
|
||||
{
|
||||
|
@ -379,7 +376,7 @@ void FileTreeModel::addFile(
|
|||
{
|
||||
bool added = false;
|
||||
|
||||
item = root_item_;
|
||||
item = root_item_.get();
|
||||
BackwardPathIterator filename_it(filename);
|
||||
|
||||
while (filename_it.hasNext())
|
||||
|
@ -411,7 +408,7 @@ void FileTreeModel::addFile(
|
|||
item = child;
|
||||
}
|
||||
|
||||
if (item != root_item_)
|
||||
if (item != root_item_.get())
|
||||
{
|
||||
assert(item->fileIndex() == file_index);
|
||||
assert(item->totalSize() == total_size);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <cstdint> // uint64_t
|
||||
#include <memory>
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QMap>
|
||||
|
@ -98,6 +99,6 @@ private:
|
|||
QModelIndexList getOrphanIndices(QModelIndexList const& indices) const;
|
||||
|
||||
QMap<int, FileTreeItem*> index_cache_;
|
||||
FileTreeItem* root_item_ = {};
|
||||
std::unique_ptr<FileTreeItem> root_item_;
|
||||
bool is_editable_ = {};
|
||||
};
|
||||
|
|
|
@ -77,8 +77,8 @@ template<typename T, typename std::enable_if<std::is_same_v<T, QString>>::type*
|
|||
auto getValue(tr_variant const* variant)
|
||||
{
|
||||
std::optional<T> ret;
|
||||
auto sv = std::string_view{};
|
||||
if (tr_variantGetStrView(variant, &sv))
|
||||
|
||||
if (auto sv = std::string_view{}; tr_variantGetStrView(variant, &sv))
|
||||
{
|
||||
ret = QString::fromUtf8(std::data(sv), std::size(sv));
|
||||
}
|
||||
|
@ -90,8 +90,8 @@ template<typename T, typename std::enable_if<std::is_same_v<T, std::string_view>
|
|||
auto getValue(tr_variant const* variant)
|
||||
{
|
||||
std::optional<T> ret;
|
||||
auto sv = std::string_view{};
|
||||
if (tr_variantGetStrView(variant, &sv))
|
||||
|
||||
if (auto sv = std::string_view{}; tr_variantGetStrView(variant, &sv))
|
||||
{
|
||||
ret = std::string_view(std::data(sv), std::size(sv));
|
||||
}
|
||||
|
@ -181,8 +181,8 @@ template<typename T>
|
|||
auto dictFind(tr_variant* dict, tr_quark key)
|
||||
{
|
||||
std::optional<T> ret;
|
||||
auto const* child = tr_variantDictFind(dict, key);
|
||||
if (child != nullptr)
|
||||
|
||||
if (auto const* child = tr_variantDictFind(dict, key); child != nullptr)
|
||||
{
|
||||
ret = getValue<T>(child);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue