diff --git a/cli/cli.cc b/cli/cli.cc index bee918f0b..a6e28d6ad 100644 --- a/cli/cli.cc +++ b/cli/cli.cc @@ -350,7 +350,7 @@ int tr_main(int argc, char* argv[]) tr_sessionSaveSettings(h, config_dir.c_str(), &settings); printf("\n"); - tr_variantFree(&settings); + tr_variantClear(&settings); tr_sessionClose(h); return EXIT_SUCCESS; } diff --git a/daemon/daemon.cc b/daemon/daemon.cc index 7a53558d0..4cd4e0971 100644 --- a/daemon/daemon.cc +++ b/daemon/daemon.cc @@ -692,7 +692,7 @@ static void daemon_reconfigure(void* /*arg*/) tr_variantDictAddBool(&settings, TR_KEY_rpc_enabled, true); tr_sessionLoadSettings(&settings, configDir, MyName); tr_sessionSet(mySession, &settings); - tr_variantFree(&settings); + tr_variantClear(&settings); tr_sessionReloadBlocklists(mySession); } } @@ -954,7 +954,7 @@ static bool init_daemon_data(int argc, char* argv[], struct daemon_data* data, b return true; EXIT_EARLY: - tr_variantFree(&data->settings); + tr_variantClear(&data->settings); return false; } @@ -985,6 +985,6 @@ int tr_main(int argc, char* argv[]) tr_error_free(error); } - tr_variantFree(&data.settings); + tr_variantClear(&data.settings); return ret; } diff --git a/gtk/Application.cc b/gtk/Application.cc index 5e5cb0e2f..7f3046ef1 100644 --- a/gtk/Application.cc +++ b/gtk/Application.cc @@ -459,7 +459,7 @@ bool Application::Impl::on_rpc_changed_idle(tr_rpc_callback_type type, tr_torren core_->signal_prefs_changed().emit(changed_key); } - tr_variantFree(&tmp); + tr_variantClear(&tmp); break; } @@ -1328,7 +1328,7 @@ bool Application::Impl::call_rpc_for_selected_torrents(std::string const& method invoked = true; } - tr_variantFree(&top); + tr_variantClear(&top); return invoked; } @@ -1353,7 +1353,7 @@ void Application::Impl::start_all_torrents() tr_variantInitDict(&request, 1); tr_variantDictAddStrView(&request, TR_KEY_method, "torrent-start"sv); tr_rpc_request_exec_json(session, &request, nullptr, nullptr); - tr_variantFree(&request); + tr_variantClear(&request); } void Application::Impl::pause_all_torrents() @@ -1364,7 +1364,7 @@ void Application::Impl::pause_all_torrents() tr_variantInitDict(&request, 1); tr_variantDictAddStrView(&request, TR_KEY_method, "torrent-stop"sv); tr_rpc_request_exec_json(session, &request, nullptr, nullptr); - tr_variantFree(&request); + tr_variantClear(&request); } tr_torrent* Application::Impl::get_first_selected_torrent() const diff --git a/gtk/DetailsDialog.cc b/gtk/DetailsDialog.cc index 8efc2fa8d..007a0d63d 100644 --- a/gtk/DetailsDialog.cc +++ b/gtk/DetailsDialog.cc @@ -416,7 +416,7 @@ void DetailsDialog::Impl::torrent_set_bool(tr_quark key, bool value) } core_->exec(&top); - tr_variantFree(&top); + tr_variantClear(&top); } void DetailsDialog::Impl::torrent_set_int(tr_quark key, int value) @@ -435,7 +435,7 @@ void DetailsDialog::Impl::torrent_set_int(tr_quark key, int value) } core_->exec(&top); - tr_variantFree(&top); + tr_variantClear(&top); } void DetailsDialog::Impl::torrent_set_real(tr_quark key, double value) @@ -454,7 +454,7 @@ void DetailsDialog::Impl::torrent_set_real(tr_quark key, double value) } core_->exec(&top); - tr_variantFree(&top); + tr_variantClear(&top); } Gtk::Widget* DetailsDialog::Impl::options_page_new() @@ -2395,7 +2395,7 @@ void DetailsDialog::Impl::on_add_tracker_response(int response, std::shared_ptr< core_->exec(&top); refresh(); - tr_variantFree(&top); + tr_variantClear(&top); } else { @@ -2465,7 +2465,7 @@ void DetailsDialog::Impl::on_tracker_list_remove_button_clicked() core_->exec(&top); refresh(); - tr_variantFree(&top); + tr_variantClear(&top); } } diff --git a/gtk/Session.cc b/gtk/Session.cc index 68abbbadd..6f1641120 100644 --- a/gtk/Session.cc +++ b/gtk/Session.cc @@ -50,7 +50,7 @@ TrVariantPtr create_variant(tr_variant&& other) new tr_variant{}, [](tr_variant* ptr) { - tr_variantFree(ptr); + tr_variantClear(ptr); delete ptr; }); *result = std::move(other); @@ -1403,7 +1403,7 @@ void Session::start_now(tr_torrent_id_t id) auto ids = tr_variantDictAddList(args, TR_KEY_ids, 1); tr_variantListAddInt(ids, id); exec(&top); - tr_variantFree(&top); + tr_variantClear(&top); } void Session::Impl::update() @@ -1674,7 +1674,7 @@ void Session::port_test() impl_->signal_port_tested.emit(is_open); }); - tr_variantFree(&request); + tr_variantClear(&request); } /*** @@ -1711,7 +1711,7 @@ void Session::blocklist_update() impl_->signal_blocklist_updated.emit(ruleCount); }); - tr_variantFree(&request); + tr_variantClear(&request); } /*** diff --git a/libtransmission/announce-list.cc b/libtransmission/announce-list.cc index 411e95df1..68a51c80a 100644 --- a/libtransmission/announce-list.cc +++ b/libtransmission/announce-list.cc @@ -268,7 +268,7 @@ bool tr_announce_list::save(std::string_view torrent_file, tr_error** error) con // confirm that it's good by parsing it back again auto const contents = tr_variantToStr(&metainfo, TR_VARIANT_FMT_BENC); - tr_variantFree(&metainfo); + tr_variantClear(&metainfo); if (auto tm = tr_torrent_metainfo{}; !tm.parseBenc(contents, error)) { return false; diff --git a/libtransmission/file.cc b/libtransmission/file.cc index e8a7d481c..012745f71 100644 --- a/libtransmission/file.cc +++ b/libtransmission/file.cc @@ -10,7 +10,6 @@ #include "error.h" #include "file.h" #include "tr-assert.h" -#include "utils.h" using namespace std::literals; diff --git a/libtransmission/makemeta.cc b/libtransmission/makemeta.cc index 640ba3617..3426831b9 100644 --- a/libtransmission/makemeta.cc +++ b/libtransmission/makemeta.cc @@ -392,6 +392,6 @@ std::string tr_metainfo_builder::benc(tr_error** error) const tr_variantDictAddInt(info_dict, TR_KEY_piece_length, pieceSize()); tr_variantDictAddRaw(info_dict, TR_KEY_pieces, std::data(piece_hashes_), std::size(piece_hashes_)); auto ret = tr_variantToStr(&top, TR_VARIANT_FMT_BENC); - tr_variantFree(&top); + tr_variantClear(&top); return ret; } diff --git a/libtransmission/peer-msgs.cc b/libtransmission/peer-msgs.cc index 2adbb90b9..1df1cb0b6 100644 --- a/libtransmission/peer-msgs.cc +++ b/libtransmission/peer-msgs.cc @@ -1227,7 +1227,7 @@ static void sendLtepHandshake(tr_peerMsgsImpl* msgs) /* cleanup */ evbuffer_free(payload); - tr_variantFree(&val); + tr_variantClear(&val); } static void parseLtepHandshake(tr_peerMsgsImpl* msgs, uint32_t len, struct evbuffer* inbuf) @@ -1333,7 +1333,7 @@ static void parseLtepHandshake(tr_peerMsgsImpl* msgs, uint32_t len, struct evbuf msgs->reqq = i; } - tr_variantFree(&val); + tr_variantClear(&val); } static void parseUtMetadata(tr_peerMsgsImpl* msgs, uint32_t msglen, struct evbuffer* inbuf) @@ -1354,7 +1354,7 @@ static void parseUtMetadata(tr_peerMsgsImpl* msgs, uint32_t msglen, struct evbuf (void)tr_variantDictFindInt(&dict, TR_KEY_msg_type, &msg_type); (void)tr_variantDictFindInt(&dict, TR_KEY_piece, &piece); (void)tr_variantDictFindInt(&dict, TR_KEY_total_size, &total_size); - tr_variantFree(&dict); + tr_variantClear(&dict); } logtrace( @@ -1401,7 +1401,7 @@ static void parseUtMetadata(tr_peerMsgsImpl* msgs, uint32_t msglen, struct evbuf /* cleanup */ evbuffer_free(payload); - tr_variantFree(&v); + tr_variantClear(&v); } } } @@ -1452,7 +1452,7 @@ static void parseUtPex(tr_peerMsgsImpl* msgs, uint32_t msglen, struct evbuffer* tr_peerMgrAddPex(tor, TR_PEER_FROM_PEX, std::data(pex), std::size(pex)); } - tr_variantFree(&val); + tr_variantClear(&val); } } @@ -2158,7 +2158,7 @@ static void updateMetadataRequests(tr_peerMsgsImpl* msgs, time_t now) /* cleanup */ evbuffer_free(payload); - tr_variantFree(&tmp); + tr_variantClear(&tmp); } } @@ -2253,7 +2253,7 @@ static size_t fillOutputBuffer(tr_peerMsgsImpl* msgs, time_t now) msgs->dbgOutMessageLen(); evbuffer_free(payload); - tr_variantFree(&tmp); + tr_variantClear(&tmp); ok = true; } @@ -2278,7 +2278,7 @@ static size_t fillOutputBuffer(tr_peerMsgsImpl* msgs, time_t now) msgs->dbgOutMessageLen(); evbuffer_free(payload); - tr_variantFree(&tmp); + tr_variantClear(&tmp); } } @@ -2623,5 +2623,5 @@ void tr_peerMsgsImpl::sendPex() this->dbgOutMessageLen(); evbuffer_free(payload); - tr_variantFree(&val); + tr_variantClear(&val); } diff --git a/libtransmission/quark.cc b/libtransmission/quark.cc index de12cf9dd..58d9e68a8 100644 --- a/libtransmission/quark.cc +++ b/libtransmission/quark.cc @@ -12,7 +12,6 @@ #include "transmission.h" #include "quark.h" -#include "utils.h" // tr_strvDup() using namespace std::literals; diff --git a/libtransmission/resume.cc b/libtransmission/resume.cc index 3278197cd..349b658eb 100644 --- a/libtransmission/resume.cc +++ b/libtransmission/resume.cc @@ -841,7 +841,7 @@ static auto loadFromFile(tr_torrent* tor, tr_resume::fields_t fieldsToLoad, bool * same resume information... */ tor->isDirty = wasDirty; - tr_variantFree(&top); + tr_variantClear(&top); return fields_loaded; } @@ -955,7 +955,7 @@ void save(tr_torrent* tor) tor->setLocalError(fmt::format(FMT_STRING("Unable to save resume file: {:s}"), tr_strerror(err))); } - tr_variantFree(&top); + tr_variantClear(&top); } } // namespace tr_resume diff --git a/libtransmission/rpc-server.cc b/libtransmission/rpc-server.cc index c39dd66d8..790fc5e84 100644 --- a/libtransmission/rpc-server.cc +++ b/libtransmission/rpc-server.cc @@ -307,7 +307,7 @@ static void handle_rpc_from_json(struct evhttp_request* req, tr_rpc_server* serv if (have_content) { - tr_variantFree(&top); + tr_variantClear(&top); } } diff --git a/libtransmission/rpcimpl.cc b/libtransmission/rpcimpl.cc index a27e035b9..a26b1b899 100644 --- a/libtransmission/rpcimpl.cc +++ b/libtransmission/rpcimpl.cc @@ -79,7 +79,7 @@ static void tr_idle_function_done(struct tr_rpc_idle_data* data, std::string_vie (*data->callback)(data->session, &data->response, data->callback_user_data); - tr_variantFree(&data->response); + tr_variantClear(&data->response); delete data; } @@ -2502,7 +2502,7 @@ void tr_rpc_request_exec_json( (*callback)(session, &response, callback_user_data); - tr_variantFree(&response); + tr_variantClear(&response); } else if (method->immediate) { @@ -2525,7 +2525,7 @@ void tr_rpc_request_exec_json( (*callback)(session, &response, callback_user_data); - tr_variantFree(&response); + tr_variantClear(&response); } else { diff --git a/libtransmission/session.cc b/libtransmission/session.cc index 473039726..b29468bc7 100644 --- a/libtransmission/session.cc +++ b/libtransmission/session.cc @@ -481,7 +481,7 @@ bool tr_sessionLoadSettings(tr_variant* dict, char const* config_dir, char const tr_variantInitDict(dict, 0); tr_sessionGetDefaultSettings(dict); tr_variantMergeDicts(dict, &oldDict); - tr_variantFree(&oldDict); + tr_variantClear(&oldDict); /* file settings override the defaults */ auto fileSettings = tr_variant{}; @@ -495,7 +495,7 @@ bool tr_sessionLoadSettings(tr_variant* dict, char const* config_dir, char const else if (tr_variantFromFile(&fileSettings, TR_VARIANT_PARSE_JSON, filename)) { tr_variantMergeDicts(dict, &fileSettings); - tr_variantFree(&fileSettings); + tr_variantClear(&fileSettings); success = true; } else @@ -520,7 +520,7 @@ void tr_sessionSaveSettings(tr_session* session, char const* config_dir, tr_vari if (auto file_settings = tr_variant{}; tr_variantFromFile(&file_settings, TR_VARIANT_PARSE_JSON, filename)) { tr_variantMergeDicts(&settings, &file_settings); - tr_variantFree(&file_settings); + tr_variantClear(&file_settings); } /* the client's settings override the file settings */ @@ -532,14 +532,14 @@ void tr_sessionSaveSettings(tr_session* session, char const* config_dir, tr_vari tr_variantInitDict(&sessionSettings, 0); tr_sessionGetSettings(session, &sessionSettings); tr_variantMergeDicts(&settings, &sessionSettings); - tr_variantFree(&sessionSettings); + tr_variantClear(&sessionSettings); } /* save the result */ tr_variantToFile(&settings, TR_VARIANT_FMT_JSON, filename); /* cleanup */ - tr_variantFree(&settings); + tr_variantClear(&settings); /* Write bandwidth groups limits to file */ bandwidthGroupWrite(session, config_dir); @@ -695,7 +695,7 @@ void tr_session::initImpl(init_data& data) tr_utpInit(this); /* cleanup */ - tr_variantFree(&settings); + tr_variantClear(&settings); data.done_cv.notify_one(); } @@ -2746,7 +2746,7 @@ static void bandwidthGroupRead(tr_session* session, std::string_view config_dir) group.honorParentLimits(TR_DOWN, honors); } } - tr_variantFree(&groups_dict); + tr_variantClear(&groups_dict); } static int bandwidthGroupWrite(tr_session const* session, std::string_view config_dir) @@ -2771,7 +2771,7 @@ static int bandwidthGroupWrite(tr_session const* session, std::string_view confi auto const filename = tr_pathbuf{ config_dir, '/', BandwidthGroupsFilename }; auto const ret = tr_variantToFile(&groups_dict, TR_VARIANT_FMT_JSON, filename); - tr_variantFree(&groups_dict); + tr_variantClear(&groups_dict); return ret; } diff --git a/libtransmission/stats.cc b/libtransmission/stats.cc index 5d4aa94ce..1bac0ecd1 100644 --- a/libtransmission/stats.cc +++ b/libtransmission/stats.cc @@ -57,7 +57,7 @@ tr_session_stats tr_stats::loadOldStats(std::string_view config_dir) ret.uploadedBytes = (uint64_t)i; } - tr_variantFree(&top); + tr_variantClear(&top); } return ret; @@ -75,7 +75,7 @@ void tr_stats::save() const tr_variantDictAddInt(&top, TR_KEY_session_count, saveme.sessionCount); tr_variantDictAddInt(&top, TR_KEY_uploaded_bytes, saveme.uploadedBytes); tr_variantToFile(&top, TR_VARIANT_FMT_JSON, filename); - tr_variantFree(&top); + tr_variantClear(&top); } void tr_stats::clear() diff --git a/libtransmission/torrent-magnet.cc b/libtransmission/torrent-magnet.cc index b674ce3fd..acaa3f76c 100644 --- a/libtransmission/torrent-magnet.cc +++ b/libtransmission/torrent-magnet.cc @@ -267,8 +267,8 @@ static bool useNewMetainfo(tr_torrent* tor, tr_incomplete_metadata const* m, tr_ tr_buildMetainfoExceptInfoDict(tor->metainfo_, &top_v); tr_variantMergeDicts(tr_variantDictAddDict(&top_v, TR_KEY_info, 0), &info_dict_v); auto const benc = tr_variantToStr(&top_v, TR_VARIANT_FMT_BENC); - tr_variantFree(&top_v); - tr_variantFree(&info_dict_v); + tr_variantClear(&top_v); + tr_variantClear(&info_dict_v); // does this synthetic torrent file parse? auto metainfo = tr_torrent_metainfo{}; diff --git a/libtransmission/tr-dht.cc b/libtransmission/tr-dht.cc index 6dfafe4d9..8d5213299 100644 --- a/libtransmission/tr-dht.cc +++ b/libtransmission/tr-dht.cc @@ -297,7 +297,7 @@ int tr_dhtInit(tr_session* ss) nodes6.assign(raw, raw + raw_len); } - tr_variantFree(&benc); + tr_variantClear(&benc); } if (have_id) @@ -405,7 +405,7 @@ void tr_dhtUninit(tr_session* ss) auto const dat_file = tr_pathbuf{ ss->configDir(), "/dht.dat"sv }; tr_variantToFile(&benc, TR_VARIANT_FMT_BENC, dat_file.sv()); - tr_variantFree(&benc); + tr_variantClear(&benc); } dht_uninit(); diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index c4702b744..641e71ca5 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -154,7 +154,7 @@ size_t tr_getDefaultDownloadDirToBuf(char* buf, size_t buflen); * tr_sessionGetDefaultSettings(&settings); * if (tr_variantDictFindInt(&settings, TR_PREFS_KEY_PEER_PORT, &i)) * fprintf(stderr, "the default peer port is %d\n", (int)i); - * tr_variantFree(&settings); + * tr_variantClear(&settings); * @endcode * * @param setme_dictionary pointer to a tr_variant dictionary @@ -218,7 +218,7 @@ void tr_sessionSaveSettings(tr_session* session, char const* config_dir, struct * configDir = tr_getDefaultConfigDir("Transmission"); * session = tr_sessionInit(configDir, true, &settings); * - * tr_variantFree(&settings); + * tr_variantClear(&settings); * @endcode * * @param configDir where Transmission will look for resume files, blocklists, etc. diff --git a/libtransmission/utils.h b/libtransmission/utils.h index 4b780a91f..2c4301554 100644 --- a/libtransmission/utils.h +++ b/libtransmission/utils.h @@ -133,8 +133,6 @@ void tr_free(void* p); #define tr_new(struct_type, n_structs) (static_cast(tr_malloc(sizeof(struct_type) * (size_t)(n_structs)))) -#define tr_new0(struct_type, n_structs) (static_cast(tr_malloc0(sizeof(struct_type) * (size_t)(n_structs)))) - constexpr bool tr_str_is_empty(char const* value) { return value == nullptr || *value == '\0'; diff --git a/libtransmission/variant.cc b/libtransmission/variant.cc index 2ade5ad56..b616d98b2 100644 --- a/libtransmission/variant.cc +++ b/libtransmission/variant.cc @@ -42,12 +42,6 @@ static bool tr_variantIsContainer(tr_variant const* v) return tr_variantIsList(v) || tr_variantIsDict(v); } -static bool tr_variantIsSomething(tr_variant const* v) -{ - return tr_variantIsContainer(v) || tr_variantIsInt(v) || tr_variantIsString(v) || tr_variantIsReal(v) || - tr_variantIsBool(v); -} - void tr_variantInit(tr_variant* v, char type) { v->type = type; @@ -197,7 +191,7 @@ bool tr_variantListRemove(tr_variant* list, size_t pos) { if (tr_variantIsList(list) && pos < list->val.l.count) { - tr_variantFree(&list->val.l.vals[pos]); + tr_variantClear(&list->val.l.vals[pos]); tr_removeElementFromArray(list->val.l.vals, pos, sizeof(tr_variant), list->val.l.count); --list->val.l.count; return true; @@ -653,7 +647,7 @@ bool tr_variantDictRemove(tr_variant* dict, tr_quark const key) { int const last = (int)dict->val.l.count - 1; - tr_variantFree(&dict->val.l.vals[i]); + tr_variantClear(&dict->val.l.vals[i]); if (i != last) { @@ -927,12 +921,14 @@ static struct VariantWalkFuncs const freeWalkFuncs = { freeContainerEndFunc, // }; -void tr_variantFree(tr_variant* v) +void tr_variantClear(tr_variant* v) { - if (tr_variantIsSomething(v)) + if (!tr_variantIsEmpty(v)) { tr_variantWalk(v, &freeWalkFuncs, nullptr, false); } + + *v = {}; } /*** @@ -1165,7 +1161,7 @@ bool tr_variantFromBuf(tr_variant* setme, int opts, std::string_view buf, char c if (!success) { - tr_variantFree(setme); + tr_variantClear(setme); } return success; diff --git a/libtransmission/variant.h b/libtransmission/variant.h index 1f0de70b6..aa22cecc2 100644 --- a/libtransmission/variant.h +++ b/libtransmission/variant.h @@ -91,7 +91,15 @@ struct tr_variant } val = {}; }; -void tr_variantFree(tr_variant*); +/** + * @brief Clear the variant to an empty state. + * + * `tr_variantIsEmpty()` will return true after this is called. + * + * The variant itself is not freed, but any memory used by + * its *value* -- e.g. a string or child variants -- is freed. + */ +void tr_variantClear(tr_variant*); /*** **** Serialization / Deserialization @@ -151,6 +159,11 @@ constexpr bool tr_variantIsType(tr_variant const* b, int type) return b != nullptr && b->type == type; } +constexpr bool tr_variantIsEmpty(tr_variant const* b) +{ + return b == nullptr || b->type == '\0'; +} + /*** **** Strings ***/ diff --git a/macosx/Controller.mm b/macosx/Controller.mm index 56ab8e6bb..51948258e 100644 --- a/macosx/Controller.mm +++ b/macosx/Controller.mm @@ -565,7 +565,7 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool auto const default_config_dir = tr_getDefaultConfigDir("Transmission"); _fLib = tr_sessionInit(default_config_dir.c_str(), YES, &settings); - tr_variantFree(&settings); + tr_variantClear(&settings); _fConfigDirectory = @(default_config_dir.c_str()); tr_sessionSetIdleLimitHitCallback(_fLib, onIdleLimitHit, (__bridge void*)(self)); diff --git a/qt/Prefs.cc b/qt/Prefs.cc index 2192d9355..58491e3c6 100644 --- a/qt/Prefs.cc +++ b/qt/Prefs.cc @@ -318,7 +318,7 @@ Prefs::Prefs(QString config_dir) } } - tr_variantFree(&top); + tr_variantClear(&top); } Prefs::~Prefs() @@ -412,10 +412,10 @@ Prefs::~Prefs() tr_variantMergeDicts(&file_settings, ¤t_settings); tr_variantToFile(&file_settings, TR_VARIANT_FMT_JSON, file.fileName().toStdString()); - tr_variantFree(&file_settings); + tr_variantClear(&file_settings); // cleanup - tr_variantFree(¤t_settings); + tr_variantClear(¤t_settings); } /** diff --git a/qt/RpcClient.cc b/qt/RpcClient.cc index 90b1d6f71..784352478 100644 --- a/qt/RpcClient.cc +++ b/qt/RpcClient.cc @@ -35,7 +35,7 @@ TrVariantPtr createVariant() return { new tr_variant{}, [](tr_variant* var) { - tr_variantFree(var); + tr_variantClear(var); delete var; } }; } diff --git a/qt/Session.cc b/qt/Session.cc index e37bde3f6..b8d7f3faf 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -352,7 +352,7 @@ void Session::start() tr_variantInitDict(&settings, 0); tr_sessionLoadSettings(&settings, config_dir_.toUtf8().constData(), "qt"); session_ = tr_sessionInit(config_dir_.toUtf8().constData(), true, &settings); - tr_variantFree(&settings); + tr_variantClear(&settings); rpc_.start(session_); diff --git a/tests/libtransmission/json-test.cc b/tests/libtransmission/json-test.cc index 11753f54b..cee1fc5ba 100644 --- a/tests/libtransmission/json-test.cc +++ b/tests/libtransmission/json-test.cc @@ -72,7 +72,7 @@ TEST_P(JSONTest, testElements) EXPECT_TRUE(tr_variantDictFindStrView(&top, tr_quark_new("null"sv), &sv)); EXPECT_EQ(""sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); } TEST_P(JSONTest, testUtf8) @@ -86,14 +86,14 @@ TEST_P(JSONTest, testUtf8) EXPECT_TRUE(tr_variantIsDict(&top)); EXPECT_TRUE(tr_variantDictFindStrView(&top, key, &sv)); EXPECT_EQ("Letöltések"sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); in = R"({ "key": "\u005C" })"sv; EXPECT_TRUE(tr_variantFromBuf(&top, TR_VARIANT_PARSE_JSON | TR_VARIANT_PARSE_INPLACE, in)); EXPECT_TRUE(tr_variantIsDict(&top)); EXPECT_TRUE(tr_variantDictFindStrView(&top, key, &sv)); EXPECT_EQ("\\"sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); /** * 1. Feed it JSON-escaped nonascii to the JSON decoder. @@ -109,7 +109,7 @@ TEST_P(JSONTest, testUtf8) EXPECT_TRUE(tr_variantDictFindStrView(&top, key, &sv)); EXPECT_EQ("Letöltések"sv, sv); auto json = tr_variantToStr(&top, TR_VARIANT_FMT_JSON); - tr_variantFree(&top); + tr_variantClear(&top); EXPECT_FALSE(std::empty(json)); EXPECT_NE(std::string::npos, json.find("\\u00f6")); @@ -118,7 +118,7 @@ TEST_P(JSONTest, testUtf8) EXPECT_TRUE(tr_variantIsDict(&top)); EXPECT_TRUE(tr_variantDictFindStrView(&top, key, &sv)); EXPECT_EQ("Letöltések"sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); } TEST_P(JSONTest, test1) @@ -167,7 +167,7 @@ TEST_P(JSONTest, test1) EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(ids, 1), &i)); EXPECT_EQ(10, i); - tr_variantFree(&top); + tr_variantClear(&top); } TEST_P(JSONTest, test2) @@ -196,7 +196,7 @@ TEST_P(JSONTest, test3) EXPECT_TRUE(tr_variantDictFindStrView(&top, TR_KEY_errorString, &sv)); EXPECT_EQ("torrent not registered with this tracker 6UHsVW'*C"sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); } TEST_P(JSONTest, unescape) @@ -209,7 +209,7 @@ TEST_P(JSONTest, unescape) EXPECT_TRUE(tr_variantDictFindStrView(&top, tr_quark_new("string-1"sv), &sv)); EXPECT_EQ("/usr/lib"sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); } INSTANTIATE_TEST_SUITE_P( // diff --git a/tests/libtransmission/rpc-test.cc b/tests/libtransmission/rpc-test.cc index dc8729296..d1dd01481 100644 --- a/tests/libtransmission/rpc-test.cc +++ b/tests/libtransmission/rpc-test.cc @@ -35,7 +35,7 @@ TEST_F(RpcTest, list) EXPECT_TRUE(tr_variantIsInt(&top)); EXPECT_TRUE(tr_variantGetInt(&top, &i)); EXPECT_EQ(12, i); - tr_variantFree(&top); + tr_variantClear(&top); tr_rpc_parse_list_str(&top, "6,7"sv); EXPECT_TRUE(tr_variantIsList(&top)); @@ -44,13 +44,13 @@ TEST_F(RpcTest, list) EXPECT_EQ(6, i); EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 1), &i)); EXPECT_EQ(7, i); - tr_variantFree(&top); + tr_variantClear(&top); tr_rpc_parse_list_str(&top, "asdf"sv); EXPECT_TRUE(tr_variantIsString(&top)); EXPECT_TRUE(tr_variantGetStrView(&top, &sv)); EXPECT_EQ("asdf"sv, sv); - tr_variantFree(&top); + tr_variantClear(&top); tr_rpc_parse_list_str(&top, "1,3-5"sv); EXPECT_TRUE(tr_variantIsList(&top)); @@ -63,7 +63,7 @@ TEST_F(RpcTest, list) EXPECT_EQ(4, i); EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 3), &i)); EXPECT_EQ(5, i); - tr_variantFree(&top); + tr_variantClear(&top); } /*** @@ -86,7 +86,7 @@ TEST_F(RpcTest, sessionGet) tr_variantDictAddStrView(&request, TR_KEY_method, "session-get"); tr_variant response; tr_rpc_request_exec_json(session_, &request, rpc_response_func, &response); - tr_variantFree(&request); + tr_variantClear(&request); EXPECT_TRUE(tr_variantIsDict(&response)); tr_variant* args; @@ -183,7 +183,7 @@ TEST_F(RpcTest, sessionGet) EXPECT_EQ(decltype(unexpected_keys){}, unexpected_keys); // cleanup - tr_variantFree(&response); + tr_variantClear(&response); tr_torrentRemove(tor, false, nullptr); } diff --git a/tests/libtransmission/test-fixtures.h b/tests/libtransmission/test-fixtures.h index f609ea828..79275fca9 100644 --- a/tests/libtransmission/test-fixtures.h +++ b/tests/libtransmission/test-fixtures.h @@ -473,7 +473,7 @@ protected: tr_variantInitDict(settings, 10); auto constexpr deleter = [](tr_variant* v) { - tr_variantFree(v); + tr_variantClear(v); delete v; }; settings_.reset(settings, deleter); diff --git a/tests/libtransmission/variant-test.cc b/tests/libtransmission/variant-test.cc index 1f6294f06..b08533756 100644 --- a/tests/libtransmission/variant-test.cc +++ b/tests/libtransmission/variant-test.cc @@ -218,7 +218,7 @@ TEST_F(VariantTest, parse) EXPECT_TRUE(tr_variantGetInt(&val, &i)); EXPECT_EQ(int64_t(64), i); EXPECT_EQ(std::data(benc) + std::size(benc), end); - tr_variantFree(&val); + tr_variantClear(&val); benc = "li64ei32ei16ee"sv; ok = tr_variantFromBuf(&val, TR_VARIANT_PARSE_BENC | TR_VARIANT_PARSE_INPLACE, benc, &end); @@ -233,7 +233,7 @@ TEST_F(VariantTest, parse) EXPECT_EQ(16, i); EXPECT_EQ(benc, tr_variantToStr(&val, TR_VARIANT_FMT_BENC)); - tr_variantFree(&val); + tr_variantClear(&val); end = nullptr; benc = "lllee"sv; @@ -245,7 +245,7 @@ TEST_F(VariantTest, parse) EXPECT_TRUE(tr_variantFromBuf(&val, TR_VARIANT_PARSE_BENC | TR_VARIANT_PARSE_INPLACE, benc, &end)); EXPECT_EQ(std::data(benc) + std::size(benc), end); EXPECT_EQ(benc, tr_variantToStr(&val, TR_VARIANT_FMT_BENC)); - tr_variantFree(&val); + tr_variantClear(&val); benc = "d20:"sv; end = nullptr; @@ -285,7 +285,7 @@ TEST_F(VariantTest, bencParseAndReencode) { EXPECT_EQ(test.benc.data() + test.benc.size(), end); EXPECT_EQ(test.benc, tr_variantToStr(&val, TR_VARIANT_FMT_BENC)); - tr_variantFree(&val); + tr_variantClear(&val); } } } @@ -302,7 +302,7 @@ TEST_F(VariantTest, bencSortWhenSerializing) EXPECT_EQ(std::data(In) + std::size(In), end); EXPECT_EQ(ExpectedOut, tr_variantToStr(&val, TR_VARIANT_FMT_BENC)); - tr_variantFree(&val); + tr_variantClear(&val); } TEST_F(VariantTest, bencMalformedTooManyEndings) @@ -317,7 +317,7 @@ TEST_F(VariantTest, bencMalformedTooManyEndings) EXPECT_EQ(std::data(In) + std::size(ExpectedOut), end); EXPECT_EQ(ExpectedOut, tr_variantToStr(&val, TR_VARIANT_FMT_BENC)); - tr_variantFree(&val); + tr_variantClear(&val); } TEST_F(VariantTest, bencMalformedNoEnding) @@ -358,7 +358,7 @@ TEST_F(VariantTest, bencToJson) auto const str = tr_variantToStr(&top, TR_VARIANT_FMT_JSON_LEAN); EXPECT_EQ(test.expected, stripWhitespace(str)); - tr_variantFree(&top); + tr_variantClear(&top); } } @@ -414,8 +414,8 @@ TEST_F(VariantTest, merge) EXPECT_TRUE(tr_variantDictFindStrView(&dest, s8, &sv)); EXPECT_EQ("ghi"sv, sv); - tr_variantFree(&dest); - tr_variantFree(&src); + tr_variantClear(&dest); + tr_variantClear(&src); } TEST_F(VariantTest, stackSmash) @@ -472,7 +472,7 @@ TEST_F(VariantTest, boolAndIntRecast) EXPECT_TRUE(tr_variantDictFindInt(&top, key4, &i)); EXPECT_NE(0, i); - tr_variantFree(&top); + tr_variantClear(&top); } TEST_F(VariantTest, dictFindType) @@ -534,7 +534,7 @@ TEST_F(VariantTest, dictFindType) EXPECT_TRUE(tr_variantDictFindInt(&top, key_int, &i)); EXPECT_EQ(ExpectedInt, i); - tr_variantFree(&top); + tr_variantClear(&top); } TEST_F(VariantTest, variantFromBufFuzz) @@ -550,13 +550,13 @@ TEST_F(VariantTest, variantFromBufFuzz) if (auto top = tr_variant{}; tr_variantFromBuf(&top, TR_VARIANT_PARSE_JSON | TR_VARIANT_PARSE_INPLACE, buf, nullptr, nullptr)) { - tr_variantFree(&top); + tr_variantClear(&top); } if (auto top = tr_variant{}; tr_variantFromBuf(&top, TR_VARIANT_PARSE_BENC | TR_VARIANT_PARSE_INPLACE, buf, nullptr, nullptr)) { - tr_variantFree(&top); + tr_variantClear(&top); } } } diff --git a/utils/edit.cc b/utils/edit.cc index de82994f7..a4258c6a2 100644 --- a/utils/edit.cc +++ b/utils/edit.cc @@ -210,7 +210,7 @@ static bool replaceURL(tr_variant* metainfo, std::string_view oldval, std::strin tierCount + 1, TR_PRIsv_ARG(sv), newstr.c_str()); - tr_variantFree(node); + tr_variantClear(node); tr_variantInitStr(node, newstr); changed = true; } @@ -366,7 +366,7 @@ int tr_main(int argc, char* argv[]) tr_variantToFile(&top, TR_VARIANT_FMT_BENC, filename); } - tr_variantFree(&top); + tr_variantClear(&top); } printf("Changed %d files\n", changedCount); diff --git a/utils/remote.cc b/utils/remote.cc index e62277de7..8e9153c06 100644 --- a/utils/remote.cc +++ b/utils/remote.cc @@ -2112,8 +2112,8 @@ static void filterIds(tr_variant* top) } static int processResponse(char const* rpcurl, std::string_view response) { - tr_variant top; - int status = EXIT_SUCCESS; + auto top = tr_variant{}; + auto status = int{ EXIT_SUCCESS }; if (debug) { @@ -2221,7 +2221,7 @@ static int processResponse(char const* rpcurl, std::string_view response) } } - tr_variantFree(&top); + tr_variantClear(&top); } } else @@ -2236,30 +2236,36 @@ static int processResponse(char const* rpcurl, std::string_view response) static CURL* tr_curl_easy_init(struct evbuffer* writebuf) { CURL* curl = curl_easy_init(); - curl_easy_setopt(curl, CURLOPT_USERAGENT, fmt::format(FMT_STRING("{:s}/{:s}"), MyName, LONG_VERSION_STRING).c_str()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunc); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, writebuf); - curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, parseResponseHeader); - curl_easy_setopt(curl, CURLOPT_POST, 1); - curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL); - curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); - curl_easy_setopt(curl, CURLOPT_VERBOSE, debug); - curl_easy_setopt(curl, CURLOPT_ENCODING, ""); /* "" tells curl to fill in the blanks with what it was compiled to support */ + (void)curl_easy_setopt(curl, CURLOPT_USERAGENT, fmt::format(FMT_STRING("{:s}/{:s}"), MyName, LONG_VERSION_STRING).c_str()); + (void)curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeFunc); + (void)curl_easy_setopt(curl, CURLOPT_WRITEDATA, writebuf); + (void)curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, parseResponseHeader); + (void)curl_easy_setopt(curl, CURLOPT_POST, 1); + (void)curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL); + (void)curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); + (void)curl_easy_setopt(curl, CURLOPT_VERBOSE, debug); + (void)curl_easy_setopt( + curl, + CURLOPT_ENCODING, + ""); /* "" tells curl to fill in the blanks with what it was compiled to support */ if (netrc != nullptr) { - curl_easy_setopt(curl, CURLOPT_NETRC_FILE, netrc); + (void)curl_easy_setopt(curl, CURLOPT_NETRC_FILE, netrc); } if (auth != nullptr) { - curl_easy_setopt(curl, CURLOPT_USERPWD, auth); + (void)curl_easy_setopt(curl, CURLOPT_USERPWD, auth); } if (UseSSL) { - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); /* do not verify subject/hostname */ - curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); /* since most certs will be self-signed, do not verify against CA */ + (void)curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); /* do not verify subject/hostname */ + (void)curl_easy_setopt( + curl, + CURLOPT_SSL_VERIFYPEER, + 0); /* since most certs will be self-signed, do not verify against CA */ } if (!tr_str_is_empty(session_id)) @@ -2267,8 +2273,8 @@ static CURL* tr_curl_easy_init(struct evbuffer* writebuf) auto const h = fmt::format(FMT_STRING("{:s}: {:s}"), TR_RPC_SESSION_ID_HEADER, session_id); auto* const custom_headers = curl_slist_append(nullptr, h.c_str()); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, custom_headers); - curl_easy_setopt(curl, CURLOPT_PRIVATE, custom_headers); + (void)curl_easy_setopt(curl, CURLOPT_HTTPHEADER, custom_headers); + (void)curl_easy_setopt(curl, CURLOPT_PRIVATE, custom_headers); } return curl; @@ -2287,17 +2293,17 @@ static void tr_curl_easy_cleanup(CURL* curl) } } -static int flush(char const* rpcurl, tr_variant** benc) +static int flush(char const* rpcurl, tr_variant* benc) { int status = EXIT_SUCCESS; - auto const json = tr_variantToStr(*benc, TR_VARIANT_FMT_JSON_LEAN); + auto const json = tr_variantToStr(benc, TR_VARIANT_FMT_JSON_LEAN); auto const rpcurl_http = fmt::format(FMT_STRING("{:s}://{:s}"), UseSSL ? "https" : "http", rpcurl); auto* const buf = evbuffer_new(); auto* curl = tr_curl_easy_init(buf); - curl_easy_setopt(curl, CURLOPT_URL, rpcurl_http.c_str()); - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json.c_str()); - curl_easy_setopt(curl, CURLOPT_TIMEOUT, getTimeoutSecs(json)); + (void)curl_easy_setopt(curl, CURLOPT_URL, rpcurl_http.c_str()); + (void)curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json.c_str()); + (void)curl_easy_setopt(curl, CURLOPT_TIMEOUT, getTimeoutSecs(json)); if (debug) { @@ -2330,7 +2336,6 @@ static int flush(char const* rpcurl, tr_variant** benc) tr_curl_easy_cleanup(curl); curl = nullptr; status |= flush(rpcurl, benc); - benc = nullptr; break; default: @@ -2349,97 +2354,81 @@ static int flush(char const* rpcurl, tr_variant** benc) tr_curl_easy_cleanup(curl); } - if (benc != nullptr) - { - tr_variantFree(*benc); - tr_free(*benc); - *benc = nullptr; - } + tr_variantClear(benc); return status; } -static tr_variant* ensure_sset(tr_variant** sset) +static tr_variant* ensure_sset(tr_variant* sset) { - tr_variant* args; - - if (*sset != nullptr) + if (!tr_variantIsEmpty(sset)) { - args = tr_variantDictFind(*sset, Arguments); - } - else - { - *sset = tr_new0(tr_variant, 1); - tr_variantInitDict(*sset, 3); - tr_variantDictAddStrView(*sset, TR_KEY_method, "session-set"sv); - args = tr_variantDictAddDict(*sset, Arguments, 0); + return tr_variantDictFind(sset, Arguments); } - return args; + tr_variantInitDict(sset, 3); + tr_variantDictAddStrView(sset, TR_KEY_method, "session-set"sv); + return tr_variantDictAddDict(sset, Arguments, 0); } -static tr_variant* ensure_tset(tr_variant** tset) +static tr_variant* ensure_tset(tr_variant* tset) { - tr_variant* args; - - if (*tset != nullptr) + if (!tr_variantIsEmpty(tset)) { - args = tr_variantDictFind(*tset, Arguments); - } - else - { - *tset = tr_new0(tr_variant, 1); - tr_variantInitDict(*tset, 3); - tr_variantDictAddStrView(*tset, TR_KEY_method, "torrent-set"sv); - args = tr_variantDictAddDict(*tset, Arguments, 1); + return tr_variantDictFind(tset, Arguments); } - return args; + tr_variantInitDict(tset, 3); + tr_variantDictAddStrView(tset, TR_KEY_method, "torrent-set"sv); + return tr_variantDictAddDict(tset, Arguments, 1); } static char rename_from[4096]; static int processArgs(char const* rpcurl, int argc, char const* const* argv) { - int c; int status = EXIT_SUCCESS; char const* optarg; - tr_variant* sset = nullptr; - tr_variant* tset = nullptr; - tr_variant* tadd = nullptr; + auto sset = tr_variant{}; + auto tset = tr_variant{}; + auto tadd = tr_variant{}; *id = '\0'; - while ((c = tr_getopt(Usage, argc, argv, std::data(Options), &optarg)) != TR_OPT_DONE) + for (;;) { - int const stepMode = getOptMode(c); + int const c = tr_getopt(Usage, argc, argv, std::data(Options), &optarg); + if (c == TR_OPT_DONE) + { + break; + } + int const stepMode = getOptMode(c); if (stepMode == 0) /* meta commands */ { switch (c) { case 'a': /* add torrent */ - if (sset != nullptr) + if (!tr_variantIsEmpty(&sset)) { status |= flush(rpcurl, &sset); } - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { status |= flush(rpcurl, &tadd); } - if (tset != nullptr) + if (!tr_variantIsEmpty(&tset)) { - addIdArg(tr_variantDictFind(tset, Arguments), id, nullptr); + addIdArg(tr_variantDictFind(&tset, Arguments), id, nullptr); status |= flush(rpcurl, &tset); } - tadd = tr_new0(tr_variant, 1); - tr_variantInitDict(tadd, 3); - tr_variantDictAddStrView(tadd, TR_KEY_method, "torrent-add"sv); - tr_variantDictAddInt(tadd, TR_KEY_tag, TAG_TORRENT_ADD); - tr_variantDictAddDict(tadd, Arguments, 0); + tr_variantInitDict(&tadd, 3); + tr_variantDictAddStrView(&tadd, TR_KEY_method, "torrent-add"sv); + tr_variantDictAddInt(&tadd, TR_KEY_tag, TAG_TORRENT_ADD); + tr_variantDictAddDict(&tadd, Arguments, 0); break; case 'b': /* debug */ @@ -2472,14 +2461,14 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) break; case 't': /* set current torrent */ - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { status |= flush(rpcurl, &tadd); } - if (tset != nullptr) + if (!tr_variantIsEmpty(&tset)) { - addIdArg(tr_variantDictFind(tset, Arguments), id, nullptr); + addIdArg(tr_variantDictFind(&tset, Arguments), id, nullptr); status |= flush(rpcurl, &tset); } @@ -2501,9 +2490,9 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) break; case TR_OPT_UNK: - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { - tr_variant* args = tr_variantDictFind(tadd, Arguments); + tr_variant* args = tr_variantDictFind(&tadd, Arguments); auto const tmp = getEncodedMetainfo(optarg); if (!std::empty(tmp)) @@ -2526,17 +2515,17 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) } else if (stepMode == MODE_TORRENT_GET) { - auto* top = tr_new0(tr_variant, 1); + auto top = tr_variant{}; tr_variant* args; tr_variant* fields; - tr_variantInitDict(top, 3); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-get"sv); - args = tr_variantDictAddDict(top, Arguments, 0); + tr_variantInitDict(&top, 3); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-get"sv); + args = tr_variantDictAddDict(&top, Arguments, 0); fields = tr_variantDictAddList(args, TR_KEY_fields, 0); - if (tset != nullptr) + if (!tr_variantIsEmpty(&tset)) { - addIdArg(tr_variantDictFind(tset, Arguments), id, nullptr); + addIdArg(tr_variantDictFind(&tset, Arguments), id, nullptr); status |= flush(rpcurl, &tset); } @@ -2544,7 +2533,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) { case 'F': filter = tr_strvDup(optarg); /* Unnecessary dup? we will use it before optarg will be changed */ - tr_variantDictAddInt(top, TR_KEY_tag, TAG_FILTER); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_FILTER); for (size_t i = 0; i < TR_N_ELEMENTS(details_keys); ++i) { @@ -2554,7 +2543,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) addIdArg(args, id, "all"); break; case 'i': - tr_variantDictAddInt(top, TR_KEY_tag, TAG_DETAILS); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_DETAILS); for (size_t i = 0; i < TR_N_ELEMENTS(details_keys); ++i) { @@ -2565,7 +2554,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) break; case 'l': - tr_variantDictAddInt(top, TR_KEY_tag, TAG_LIST); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_LIST); for (size_t i = 0; i < TR_N_ELEMENTS(list_keys); ++i) { @@ -2576,7 +2565,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) break; case 940: - tr_variantDictAddInt(top, TR_KEY_tag, TAG_FILES); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_FILES); for (size_t i = 0; i < TR_N_ELEMENTS(files_keys); ++i) { @@ -2587,20 +2576,20 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) break; case 941: - tr_variantDictAddInt(top, TR_KEY_tag, TAG_PEERS); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_PEERS); tr_variantListAddStrView(fields, "peers"sv); addIdArg(args, id, nullptr); break; case 942: - tr_variantDictAddInt(top, TR_KEY_tag, TAG_PIECES); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_PIECES); tr_variantListAddStrView(fields, "pieces"sv); tr_variantListAddStrView(fields, "pieceCount"sv); addIdArg(args, id, nullptr); break; case 943: - tr_variantDictAddInt(top, TR_KEY_tag, TAG_TRACKERS); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_TRACKERS); tr_variantListAddStrView(fields, "trackerStats"sv); addIdArg(args, id, nullptr); break; @@ -2906,9 +2895,9 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) { tr_variant* args; - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { - args = tr_variantDictFind(tadd, Arguments); + args = tr_variantDictFind(&tadd, Arguments); } else { @@ -2979,17 +2968,17 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) } else if (c == 961) /* set location */ { - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { - tr_variant* args = tr_variantDictFind(tadd, Arguments); + tr_variant* args = tr_variantDictFind(&tadd, Arguments); tr_variantDictAddStr(args, TR_KEY_download_dir, optarg); } else { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-set-location"sv); - tr_variant* args = tr_variantDictAddDict(top, Arguments, 3); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-set-location"sv); + tr_variant* args = tr_variantDictAddDict(&top, Arguments, 3); tr_variantDictAddStr(args, TR_KEY_location, optarg); tr_variantDictAddBool(args, TR_KEY_move, false); addIdArg(args, id, nullptr); @@ -3003,40 +2992,40 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) { case 920: /* session-info */ { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "session-get"sv); - tr_variantDictAddInt(top, TR_KEY_tag, TAG_SESSION); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "session-get"sv); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_SESSION); status |= flush(rpcurl, &top); break; } case 's': /* start */ - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { - tr_variantDictAddBool(tr_variantDictFind(tadd, TR_KEY_arguments), TR_KEY_paused, false); + tr_variantDictAddBool(tr_variantDictFind(&tadd, TR_KEY_arguments), TR_KEY_paused, false); } else { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-start"sv); - addIdArg(tr_variantDictAddDict(top, Arguments, 1), id, nullptr); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-start"sv); + addIdArg(tr_variantDictAddDict(&top, Arguments, 1), id, nullptr); status |= flush(rpcurl, &top); } break; case 'S': /* stop */ - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { - tr_variantDictAddBool(tr_variantDictFind(tadd, TR_KEY_arguments), TR_KEY_paused, true); + tr_variantDictAddBool(tr_variantDictFind(&tadd, TR_KEY_arguments), TR_KEY_paused, true); } else { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-stop"sv); - addIdArg(tr_variantDictAddDict(top, Arguments, 1), id, nullptr); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-stop"sv); + addIdArg(tr_variantDictAddDict(&top, Arguments, 1), id, nullptr); status |= flush(rpcurl, &top); } @@ -3044,77 +3033,77 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) case 'w': { - tr_variant* args = tadd != nullptr ? tr_variantDictFind(tadd, TR_KEY_arguments) : ensure_sset(&sset); + auto* args = !tr_variantIsEmpty(&tadd) ? tr_variantDictFind(&tadd, TR_KEY_arguments) : ensure_sset(&sset); tr_variantDictAddStr(args, TR_KEY_download_dir, optarg); break; } case 850: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 1); - tr_variantDictAddStrView(top, TR_KEY_method, "session-close"sv); + auto top = tr_variant{}; + tr_variantInitDict(&top, 1); + tr_variantDictAddStrView(&top, TR_KEY_method, "session-close"sv); status |= flush(rpcurl, &top); break; } case 963: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 1); - tr_variantDictAddStrView(top, TR_KEY_method, "blocklist-update"sv); + auto top = tr_variant{}; + tr_variantInitDict(&top, 1); + tr_variantDictAddStrView(&top, TR_KEY_method, "blocklist-update"sv); status |= flush(rpcurl, &top); break; } case 921: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "session-stats"sv); - tr_variantDictAddInt(top, TR_KEY_tag, TAG_STATS); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "session-stats"sv); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_STATS); status |= flush(rpcurl, &top); break; } case 962: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "port-test"sv); - tr_variantDictAddInt(top, TR_KEY_tag, TAG_PORTTEST); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "port-test"sv); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_PORTTEST); status |= flush(rpcurl, &top); break; } case 600: { - if (tset != nullptr) + if (!tr_variantIsEmpty(&tset)) { - addIdArg(tr_variantDictFind(tset, Arguments), id, nullptr); + addIdArg(tr_variantDictFind(&tset, Arguments), id, nullptr); status |= flush(rpcurl, &tset); } - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-reannounce"sv); - addIdArg(tr_variantDictAddDict(top, Arguments, 1), id, nullptr); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-reannounce"sv); + addIdArg(tr_variantDictAddDict(&top, Arguments, 1), id, nullptr); status |= flush(rpcurl, &top); break; } case 'v': { - if (tset != nullptr) + if (!tr_variantIsEmpty(&tset)) { - addIdArg(tr_variantDictFind(tset, Arguments), id, nullptr); + addIdArg(tr_variantDictFind(&tset, Arguments), id, nullptr); status |= flush(rpcurl, &tset); } - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-verify"sv); - addIdArg(tr_variantDictAddDict(top, Arguments, 1), id, nullptr); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-verify"sv); + addIdArg(tr_variantDictAddDict(&top, Arguments, 1), id, nullptr); status |= flush(rpcurl, &top); break; } @@ -3122,10 +3111,10 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) case 'r': case 840: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-remove"sv); - auto* args = tr_variantDictAddDict(top, Arguments, 2); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-remove"sv); + auto* args = tr_variantDictAddDict(&top, Arguments, 2); tr_variantDictAddBool(args, TR_KEY_delete_local_data, c == 840); addIdArg(args, id, nullptr); status |= flush(rpcurl, &top); @@ -3134,10 +3123,10 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) case 960: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "torrent-set-location"sv); - auto* args = tr_variantDictAddDict(top, Arguments, 3); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "torrent-set-location"sv); + auto* args = tr_variantDictAddDict(&top, Arguments, 3); tr_variantDictAddStr(args, TR_KEY_location, optarg); tr_variantDictAddBool(args, TR_KEY_move, true); addIdArg(args, id, nullptr); @@ -3147,10 +3136,10 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) case 964: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStr(top, TR_KEY_method, "rename"); - auto* args = tr_variantDictAddDict(top, Arguments, 3); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStr(&top, TR_KEY_method, "rename"); + auto* args = tr_variantDictAddDict(&top, Arguments, 3); tr_variantDictAddStr(args, TR_KEY_path, rename_from); tr_variantDictAddStr(args, TR_KEY_name, optarg); addIdArg(args, id, NULL); @@ -3166,10 +3155,10 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) case 732: { - auto* top = tr_new0(tr_variant, 1); - tr_variantInitDict(top, 2); - tr_variantDictAddStrView(top, TR_KEY_method, "group-get"sv); - tr_variantDictAddInt(top, TR_KEY_tag, TAG_GROUPS); + auto top = tr_variant{}; + tr_variantInitDict(&top, 2); + tr_variantDictAddStrView(&top, TR_KEY_method, "group-get"sv); + tr_variantDictAddInt(&top, TR_KEY_tag, TAG_GROUPS); status |= flush(rpcurl, &top); break; } @@ -3182,18 +3171,18 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv) } } - if (tadd != nullptr) + if (!tr_variantIsEmpty(&tadd)) { status |= flush(rpcurl, &tadd); } - if (tset != nullptr) + if (!tr_variantIsEmpty(&tset)) { - addIdArg(tr_variantDictFind(tset, Arguments), id, nullptr); + addIdArg(tr_variantDictFind(&tset, Arguments), id, nullptr); status |= flush(rpcurl, &tset); } - if (sset != nullptr) + if (!tr_variantIsEmpty(&sset)) { status |= flush(rpcurl, &sset); } diff --git a/utils/show.cc b/utils/show.cc index f6db7547b..99ba64bcd 100644 --- a/utils/show.cc +++ b/utils/show.cc @@ -403,7 +403,7 @@ void doScrape(tr_torrent_metainfo const& metainfo) } } - tr_variantFree(&top); + tr_variantClear(&top); if (!matched) {