diff --git a/cli/cli.cc b/cli/cli.cc index 08cbec082..cd6a651b9 100644 --- a/cli/cli.cc +++ b/cli/cli.cc @@ -445,7 +445,7 @@ int tr_main(int argc, char* argv[]) } } - tr_sessionSaveSettings(h, config_dir.c_str(), settings); + tr_sessionSaveSettings(h, config_dir, settings); printf("\n"); tr_sessionClose(h); diff --git a/daemon/daemon.cc b/daemon/daemon.cc index de370327a..acc105c80 100644 --- a/daemon/daemon.cc +++ b/daemon/daemon.cc @@ -854,11 +854,10 @@ int tr_daemon::start([[maybe_unused]] bool foreground) } /* start the session */ - auto const* const cdir = this->config_dir_.c_str(); auto* session = tr_sessionInit(config_dir_, true, settings_); tr_sessionSetRPCCallback(session, on_rpc_callback, this); tr_logAddInfo(fmt::format(fmt::runtime(_("Loading settings from '{path}'")), fmt::arg("path", config_dir_))); - tr_sessionSaveSettings(session, cdir, settings_); + tr_sessionSaveSettings(session, config_dir_, settings_); auto const* const settings_map = settings_.get_if(); if (settings_map == nullptr) @@ -1013,7 +1012,7 @@ CLEANUP: event_base_free(ev_base_); - tr_sessionSaveSettings(my_session_, cdir, settings_); + tr_sessionSaveSettings(my_session_, config_dir_, settings_); tr_sessionClose(my_session_); pumpLogMessages(log_stream_); printf(" done.\n"); diff --git a/gtk/Application.cc b/gtk/Application.cc index f2c29e9d6..37d532402 100644 --- a/gtk/Application.cc +++ b/gtk/Application.cc @@ -1137,11 +1137,11 @@ void Application::Impl::on_prefs_changed(tr_quark const key) break; case TR_KEY_default_trackers: - tr_sessionSetDefaultTrackers(tr, gtr_pref_string_get(key).c_str()); + tr_sessionSetDefaultTrackers(tr, gtr_pref_string_get(key)); break; case TR_KEY_download_dir: - tr_sessionSetDownloadDir(tr, gtr_pref_string_get(key).c_str()); + tr_sessionSetDownloadDir(tr, gtr_pref_string_get(key)); break; case TR_KEY_message_level: @@ -1244,7 +1244,7 @@ void Application::Impl::on_prefs_changed(tr_quark const key) break; case TR_KEY_rpc_whitelist: - tr_sessionSetRPCWhitelist(tr, gtr_pref_string_get(key).c_str()); + tr_sessionSetRPCWhitelist(tr, gtr_pref_string_get(key)); break; case TR_KEY_rpc_whitelist_enabled: @@ -1252,11 +1252,11 @@ void Application::Impl::on_prefs_changed(tr_quark const key) break; case TR_KEY_rpc_username: - tr_sessionSetRPCUsername(tr, gtr_pref_string_get(key).c_str()); + tr_sessionSetRPCUsername(tr, gtr_pref_string_get(key)); break; case TR_KEY_rpc_password: - tr_sessionSetRPCPassword(tr, gtr_pref_string_get(key).c_str()); + tr_sessionSetRPCPassword(tr, gtr_pref_string_get(key)); break; case TR_KEY_rpc_authentication_required: @@ -1300,7 +1300,7 @@ void Application::Impl::on_prefs_changed(tr_quark const key) break; case TR_KEY_incomplete_dir: - tr_sessionSetIncompleteDir(tr, gtr_pref_string_get(key).c_str()); + tr_sessionSetIncompleteDir(tr, gtr_pref_string_get(key)); break; case TR_KEY_incomplete_dir_enabled: @@ -1312,7 +1312,7 @@ void Application::Impl::on_prefs_changed(tr_quark const key) break; case TR_KEY_script_torrent_done_filename: - tr_sessionSetScript(tr, TR_SCRIPT_ON_TORRENT_DONE, gtr_pref_string_get(key).c_str()); + tr_sessionSetScript(tr, TR_SCRIPT_ON_TORRENT_DONE, gtr_pref_string_get(key)); break; case TR_KEY_script_torrent_done_seeding_enabled: @@ -1320,7 +1320,7 @@ void Application::Impl::on_prefs_changed(tr_quark const key) break; case TR_KEY_script_torrent_done_seeding_filename: - tr_sessionSetScript(tr, TR_SCRIPT_ON_TORRENT_DONE_SEEDING, gtr_pref_string_get(key).c_str()); + tr_sessionSetScript(tr, TR_SCRIPT_ON_TORRENT_DONE_SEEDING, gtr_pref_string_get(key)); break; case TR_KEY_start_added_torrents: diff --git a/gtk/Prefs.cc b/gtk/Prefs.cc index afcb59056..127625c8a 100644 --- a/gtk/Prefs.cc +++ b/gtk/Prefs.cc @@ -209,5 +209,5 @@ void gtr_pref_string_set(tr_quark const key, std::string_view value) void gtr_pref_save(tr_session* session) { - tr_sessionSaveSettings(session, gl_confdir.c_str(), getPrefs()); + tr_sessionSaveSettings(session, gl_confdir, getPrefs()); } diff --git a/libtransmission/session.cc b/libtransmission/session.cc index 3388a56a9..dfa4d58a3 100644 --- a/libtransmission/session.cc +++ b/libtransmission/session.cc @@ -133,7 +133,7 @@ void bandwidthGroupRead(tr_session* session, std::string_view config_dir) } } -void bandwidthGroupWrite(tr_session const* session, std::string_view config_dir) +void bandwidthGroupWrite(tr_session const* session, std::string_view const config_dir) { auto const& groups = session->bandwidthGroups(); auto groups_map = tr_variant::Map{ std::size(groups) }; @@ -504,7 +504,7 @@ tr_variant tr_sessionLoadSettings(std::string_view const config_dir, tr_variant return settings; } -void tr_sessionSaveSettings(tr_session* session, char const* config_dir, tr_variant const& client_settings) +void tr_sessionSaveSettings(tr_session* session, std::string_view const config_dir, tr_variant const& client_settings) { using namespace bandwidth_group_helpers; @@ -956,11 +956,11 @@ void tr_session::Settings::fixup_to_preferred_transports() // --- -void tr_sessionSetDownloadDir(tr_session* session, char const* dir) +void tr_sessionSetDownloadDir(tr_session* session, std::string_view const dir) { TR_ASSERT(session != nullptr); - session->setDownloadDir(dir != nullptr ? dir : ""); + session->setDownloadDir(dir); } char const* tr_sessionGetDownloadDir(tr_session const* session) @@ -995,11 +995,11 @@ bool tr_sessionIsIncompleteFileNamingEnabled(tr_session const* session) // --- -void tr_sessionSetIncompleteDir(tr_session* session, char const* dir) +void tr_sessionSetIncompleteDir(tr_session* session, std::string_view const dir) { TR_ASSERT(session != nullptr); - session->setIncompleteDir(dir != nullptr ? dir : ""); + session->setIncompleteDir(dir); } char const* tr_sessionGetIncompleteDir(tr_session const* session) @@ -1747,11 +1747,11 @@ void tr_session::setDefaultTrackers(std::string_view trackers) } } -void tr_sessionSetDefaultTrackers(tr_session* session, char const* trackers) +void tr_sessionSetDefaultTrackers(tr_session* session, std::string_view const trackers) { TR_ASSERT(session != nullptr); - session->setDefaultTrackers(trackers != nullptr ? trackers : ""); + session->setDefaultTrackers(trackers); } // --- @@ -1898,11 +1898,11 @@ void tr_sessionSetRPCCallback(tr_session* session, tr_rpc_func func, void* user_ session->rpc_func_user_data_ = user_data; } -void tr_sessionSetRPCWhitelist(tr_session* session, char const* whitelist) +void tr_sessionSetRPCWhitelist(tr_session* session, std::string_view const whitelist) { TR_ASSERT(session != nullptr); - session->setRpcWhitelist(whitelist != nullptr ? whitelist : ""); + session->setRpcWhitelist(whitelist); } char const* tr_sessionGetRPCWhitelist(tr_session const* session) @@ -1926,11 +1926,11 @@ bool tr_sessionGetRPCWhitelistEnabled(tr_session const* session) return session->useRpcWhitelist(); } -void tr_sessionSetRPCPassword(tr_session* session, char const* password) +void tr_sessionSetRPCPassword(tr_session* session, std::string_view const password) { TR_ASSERT(session != nullptr); - session->rpc_server_->set_password(password != nullptr ? password : ""); + session->rpc_server_->set_password(password); } char const* tr_sessionGetRPCPassword(tr_session const* session) @@ -1940,11 +1940,11 @@ char const* tr_sessionGetRPCPassword(tr_session const* session) return session->rpc_server_->get_salted_password().c_str(); } -void tr_sessionSetRPCUsername(tr_session* session, char const* username) +void tr_sessionSetRPCUsername(tr_session* session, std::string_view const username) { TR_ASSERT(session != nullptr); - session->rpc_server_->set_username(username != nullptr ? username : ""); + session->rpc_server_->set_username(username); } char const* tr_sessionGetRPCUsername(tr_session const* session) @@ -1986,12 +1986,12 @@ bool tr_sessionIsScriptEnabled(tr_session const* session, TrScript type) return session->useScript(type); } -void tr_sessionSetScript(tr_session* session, TrScript type, char const* script) +void tr_sessionSetScript(tr_session* session, TrScript type, std::string_view const script) { TR_ASSERT(session != nullptr); TR_ASSERT(type < TR_SCRIPT_N_TYPES); - session->setScript(type, script != nullptr ? script : ""); + session->setScript(type, script); } char const* tr_sessionGetScript(tr_session const* session, TrScript type) diff --git a/libtransmission/session.h b/libtransmission/session.h index 85316239f..62dd7fe0e 100644 --- a/libtransmission/session.h +++ b/libtransmission/session.h @@ -1313,10 +1313,10 @@ private: friend void tr_sessionSetQueueStalledMinutes(tr_session* session, int minutes); friend void tr_sessionSetRPCCallback(tr_session* session, tr_rpc_func func, void* user_data); friend void tr_sessionSetRPCEnabled(tr_session* session, bool is_enabled); - friend void tr_sessionSetRPCPassword(tr_session* session, char const* password); + friend void tr_sessionSetRPCPassword(tr_session* session, std::string_view password); friend void tr_sessionSetRPCPasswordEnabled(tr_session* session, bool enabled); friend void tr_sessionSetRPCPort(tr_session* session, uint16_t hport); - friend void tr_sessionSetRPCUsername(tr_session* session, char const* username); + friend void tr_sessionSetRPCUsername(tr_session* session, std::string_view username); friend void tr_sessionSetRatioLimit(tr_session* session, double desired_ratio); friend void tr_sessionSetRatioLimited(tr_session* session, bool is_limited); friend void tr_sessionSetUTPEnabled(tr_session* session, bool enabled); diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index ed29db564..11a0baa8d 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -185,7 +185,7 @@ tr_variant tr_sessionGetSettings(tr_session const* session); * @param client_settings the dictionary to save * @see `tr_sessionLoadSettings()` */ -void tr_sessionSaveSettings(tr_session* session, char const* config_dir, tr_variant const& client_settings); +void tr_sessionSaveSettings(tr_session* session, std::string_view config_dir, tr_variant const& client_settings); /** * @brief Initialize a libtransmission session. @@ -247,7 +247,7 @@ char const* tr_sessionGetDownloadDir(tr_session const* session); * @see `tr_sessionGetDownloadDir()` * @see `tr_ctorSetDownloadDir()` */ -void tr_sessionSetDownloadDir(tr_session* session, char const* download_dir); +void tr_sessionSetDownloadDir(tr_session* session, std::string_view download_dir); /** @brief get the per-session incomplete download folder */ char const* tr_sessionGetIncompleteDir(tr_session const* session); @@ -271,7 +271,7 @@ char const* tr_sessionGetIncompleteDir(tr_session const* session); * @see `tr_sessionSetIncompleteDirEnabled()` * @see `tr_sessionGetIncompleteDirEnabled()` */ -void tr_sessionSetIncompleteDir(tr_session* session, char const* dir); +void tr_sessionSetIncompleteDir(tr_session* session, std::string_view dir); /** @brief get whether or not the incomplete download folder is enabled */ bool tr_sessionIsIncompleteDirEnabled(tr_session const* session); @@ -333,7 +333,7 @@ char const* tr_sessionGetRPCWhitelist(tr_session const* session); * `'?'` is interpreted as a single-character wildcard and * `'*'` is interpreted as a multi-character wildcard. */ -void tr_sessionSetRPCWhitelist(tr_session* session, char const* whitelist); +void tr_sessionSetRPCWhitelist(tr_session* session, std::string_view whitelist); bool tr_sessionGetRPCWhitelistEnabled(tr_session const* session); void tr_sessionSetRPCWhitelistEnabled(tr_session* session, bool is_enabled); @@ -344,15 +344,15 @@ void tr_sessionSetRPCWhitelistEnabled(tr_session* session, bool is_enabled); @see `tr_sessionInit()` @see `tr_sessionSetRPCPassword()` */ char const* tr_sessionGetRPCPassword(tr_session const* session); -void tr_sessionSetRPCPassword(tr_session* session, char const* password); +void tr_sessionSetRPCPassword(tr_session* session, std::string_view password); char const* tr_sessionGetRPCUsername(tr_session const* session); -void tr_sessionSetRPCUsername(tr_session* session, char const* username); +void tr_sessionSetRPCUsername(tr_session* session, std::string_view username); bool tr_sessionIsRPCPasswordEnabled(tr_session const* session); void tr_sessionSetRPCPasswordEnabled(tr_session* session, bool is_enabled); -void tr_sessionSetDefaultTrackers(tr_session* session, char const* trackers); +void tr_sessionSetDefaultTrackers(tr_session* session, std::string_view trackers); enum tr_rpc_callback_type : uint8_t { @@ -662,7 +662,7 @@ enum TrScript : uint8_t char const* tr_sessionGetScript(tr_session const* session, TrScript type); -void tr_sessionSetScript(tr_session* session, TrScript type, char const* script_filename); +void tr_sessionSetScript(tr_session* session, TrScript type, std::string_view script_filename); bool tr_sessionIsScriptEnabled(tr_session const* session, TrScript type); diff --git a/qt/Session.cc b/qt/Session.cc index dece5d183..56eb27f56 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -219,7 +219,7 @@ void Session::updatePref(int key) case Prefs::RPC_PASSWORD: if (session_ != nullptr) { - tr_sessionSetRPCPassword(session_, prefs_.get(key).toUtf8().constData()); + tr_sessionSetRPCPassword(session_, prefs_.get(key).toStdString()); } break; @@ -235,7 +235,7 @@ void Session::updatePref(int key) case Prefs::RPC_USERNAME: if (session_ != nullptr) { - tr_sessionSetRPCUsername(session_, prefs_.get(key).toUtf8().constData()); + tr_sessionSetRPCUsername(session_, prefs_.get(key).toStdString()); } break; @@ -251,7 +251,7 @@ void Session::updatePref(int key) case Prefs::RPC_WHITELIST: if (session_ != nullptr) { - tr_sessionSetRPCWhitelist(session_, prefs_.get(key).toUtf8().constData()); + tr_sessionSetRPCWhitelist(session_, prefs_.get(key).toStdString()); } break; diff --git a/tests/libtransmission/session-test.cc b/tests/libtransmission/session-test.cc index db8e56ac4..7e3e44807 100644 --- a/tests/libtransmission/session-test.cc +++ b/tests/libtransmission/session-test.cc @@ -48,15 +48,11 @@ TEST_F(SessionTest, propertiesApi) EXPECT_EQ(value, session->downloadDir()); EXPECT_EQ(value, tr_sessionGetDownloadDir(session)); - tr_sessionSetDownloadDir(session, std::string(value).c_str()); + tr_sessionSetDownloadDir(session, value); EXPECT_EQ(value, session->downloadDir()); EXPECT_EQ(value, tr_sessionGetDownloadDir(session)); } - tr_sessionSetDownloadDir(session, nullptr); - EXPECT_EQ(""sv, session->downloadDir()); - EXPECT_EQ(""sv, tr_sessionGetDownloadDir(session)); - // incomplete dir for (auto const& value : { "foo"sv, "bar"sv, ""sv }) @@ -65,15 +61,11 @@ TEST_F(SessionTest, propertiesApi) EXPECT_EQ(value, session->incompleteDir()); EXPECT_EQ(value, tr_sessionGetIncompleteDir(session)); - tr_sessionSetIncompleteDir(session, std::string(value).c_str()); + tr_sessionSetIncompleteDir(session, value); EXPECT_EQ(value, session->incompleteDir()); EXPECT_EQ(value, tr_sessionGetIncompleteDir(session)); } - tr_sessionSetIncompleteDir(session, nullptr); - EXPECT_EQ(""sv, session->incompleteDir()); - EXPECT_EQ(""sv, tr_sessionGetIncompleteDir(session)); - // script for (auto const& type : { TR_SCRIPT_ON_TORRENT_ADDED, TR_SCRIPT_ON_TORRENT_DONE }) @@ -84,15 +76,11 @@ TEST_F(SessionTest, propertiesApi) EXPECT_EQ(value, session->script(type)); EXPECT_EQ(value, tr_sessionGetScript(session, type)); - tr_sessionSetScript(session, type, std::string(value).c_str()); + tr_sessionSetScript(session, type, value); EXPECT_EQ(value, session->script(type)); EXPECT_EQ(value, tr_sessionGetScript(session, type)); } - tr_sessionSetScript(session, type, nullptr); - EXPECT_EQ(""sv, session->script(type)); - EXPECT_EQ(""sv, tr_sessionGetScript(session, type)); - for (auto const value : { true, false }) { session->useScript(type, value); @@ -139,18 +127,15 @@ TEST_F(SessionTest, propertiesApi) for (auto const& value : { "foo"sv, "bar"sv, ""sv }) { - tr_sessionSetRPCUsername(session, std::string{ value }.c_str()); + tr_sessionSetRPCUsername(session, value); EXPECT_EQ(value, tr_sessionGetRPCUsername(session)); } - tr_sessionSetRPCUsername(session, nullptr); - EXPECT_EQ(""sv, tr_sessionGetRPCUsername(session)); - // rpc password (unsalted) { auto const value = "foo"sv; - tr_sessionSetRPCPassword(session, std::string{ value }.c_str()); + tr_sessionSetRPCPassword(session, value); EXPECT_NE(value, tr_sessionGetRPCPassword(session)); EXPECT_EQ('{', tr_sessionGetRPCPassword(session)[0]); } @@ -160,7 +145,7 @@ TEST_F(SessionTest, propertiesApi) { auto const plaintext = "foo"sv; auto const salted = tr_ssha1(plaintext); - tr_sessionSetRPCPassword(session, salted.c_str()); + tr_sessionSetRPCPassword(session, salted); EXPECT_EQ(salted, tr_sessionGetRPCPassword(session)); }