From 1a1846269166b8a9b96e3abdd9caa20f8d9bce7a Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 18 Dec 2025 23:06:23 -0600 Subject: [PATCH] refactor: make tr_sessionInit() config_dir arg a string_view (#7939) --- cli/cli.cc | 2 +- daemon/daemon.cc | 4 ++-- gtk/Application.cc | 2 +- libtransmission/session.cc | 3 +-- libtransmission/session.h | 5 ++++- libtransmission/transmission.h | 2 +- macosx/Controller.mm | 2 +- qt/Session.cc | 5 +++-- tests/libtransmission/session-test.cc | 2 +- tests/libtransmission/test-fixtures.h | 2 +- 10 files changed, 16 insertions(+), 13 deletions(-) diff --git a/cli/cli.cc b/cli/cli.cc index 101d6d494..52e4e59a8 100644 --- a/cli/cli.cc +++ b/cli/cli.cc @@ -346,7 +346,7 @@ int tr_main(int argc, char* argv[]) return EXIT_FAILURE; } - auto* const h = tr_sessionInit(config_dir.c_str(), false, settings); + auto* const h = tr_sessionInit(config_dir, false, settings); auto* const ctor = tr_ctorNew(h); tr_ctorSetPaused(ctor, TR_FORCE, false); diff --git a/daemon/daemon.cc b/daemon/daemon.cc index 375e79b4b..bd50332f7 100644 --- a/daemon/daemon.cc +++ b/daemon/daemon.cc @@ -783,9 +783,9 @@ int tr_daemon::start([[maybe_unused]] bool foreground) /* start the session */ auto const* const cdir = this->config_dir_.c_str(); - auto* session = tr_sessionInit(cdir, true, settings_); + 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", cdir))); + tr_logAddInfo(fmt::format(fmt::runtime(_("Loading settings from '{path}'")), fmt::arg("path", config_dir_))); tr_sessionSaveSettings(session, cdir, settings_); auto const* const settings_map = settings_.get_if(); diff --git a/gtk/Application.cc b/gtk/Application.cc index dd83a0f69..a681b521f 100644 --- a/gtk/Application.cc +++ b/gtk/Application.cc @@ -614,7 +614,7 @@ void Application::Impl::on_startup() } /* initialize the libtransmission session */ - session = tr_sessionInit(config_dir_.c_str(), true, gtr_pref_get_all()); + session = tr_sessionInit(config_dir_, true, gtr_pref_get_all()); gtr_pref_flag_set(TR_KEY_alt_speed_enabled, tr_sessionUsesAltSpeed(session)); gtr_pref_int_set(TR_KEY_peer_port, tr_sessionGetPeerPort(session)); diff --git a/libtransmission/session.cc b/libtransmission/session.cc index bbccd2c1a..59efd5421 100644 --- a/libtransmission/session.cc +++ b/libtransmission/session.cc @@ -552,11 +552,10 @@ struct tr_session::init_data std::condition_variable_any done_cv; }; -tr_session* tr_sessionInit(char const* config_dir, bool message_queueing_enabled, tr_variant const& client_settings) +tr_session* tr_sessionInit(std::string_view const config_dir, bool message_queueing_enabled, tr_variant const& client_settings) { using namespace bandwidth_group_helpers; - TR_ASSERT(config_dir != nullptr); TR_ASSERT(client_settings.holds_alternative()); tr_timeUpdate(time(nullptr)); diff --git a/libtransmission/session.h b/libtransmission/session.h index 793476d84..688defca6 100644 --- a/libtransmission/session.h +++ b/libtransmission/session.h @@ -1213,7 +1213,10 @@ private: friend size_t tr_sessionGetAltSpeed_KBps(tr_session const* session, tr_direction dir); friend tr_port_forwarding_state tr_sessionGetPortForwarding(tr_session const* session); friend tr_sched_day tr_sessionGetAltSpeedDay(tr_session const* session); - friend tr_session* tr_sessionInit(char const* config_dir, bool message_queueing_enabled, tr_variant const& client_settings); + friend tr_session* tr_sessionInit( + std::string_view config_dir, + bool message_queueing_enabled, + tr_variant const& client_settings); friend uint16_t tr_sessionGetPeerPort(tr_session const* session); friend uint16_t tr_sessionGetRPCPort(tr_session const* session); friend uint16_t tr_sessionSetPeerPortRandom(tr_session* session); diff --git a/libtransmission/transmission.h b/libtransmission/transmission.h index 3642bbdd9..3bbd7663d 100644 --- a/libtransmission/transmission.h +++ b/libtransmission/transmission.h @@ -218,7 +218,7 @@ void tr_sessionSaveSettings(tr_session* session, char const* config_dir, tr_vari * @see `tr_sessionLoadSettings()` * @see `tr_getDefaultConfigDir()` */ -tr_session* tr_sessionInit(char const* config_dir, bool message_queueing_enabled, tr_variant const& settings); +tr_session* tr_sessionInit(std::string_view config_dir, bool message_queueing_enabled, tr_variant const& settings); /** @brief Update a session's settings from a benc dictionary like to the one used in `tr_sessionInit()` */ diff --git a/macosx/Controller.mm b/macosx/Controller.mm index fb24443a3..377a11c97 100644 --- a/macosx/Controller.mm +++ b/macosx/Controller.mm @@ -561,7 +561,7 @@ void onTorrentCompletenessChanged(tr_torrent* tor, tr_completeness status, bool initUnits(); auto const default_config_dir = tr_getDefaultConfigDir("Transmission"); - _fLib = tr_sessionInit(default_config_dir.c_str(), YES, settings); + _fLib = tr_sessionInit(default_config_dir, YES, settings); _fConfigDirectory = @(default_config_dir.c_str()); tr_sessionSetIdleLimitHitCallback(_fLib, onIdleLimitHit, (__bridge void*)(self)); diff --git a/qt/Session.cc b/qt/Session.cc index a25b38233..16d1f4681 100644 --- a/qt/Session.cc +++ b/qt/Session.cc @@ -371,8 +371,9 @@ void Session::start() } else { - auto const settings = tr_sessionLoadSettings(config_dir_.toStdString()); - session_ = tr_sessionInit(config_dir_.toUtf8().constData(), true, settings); + auto config_dir = config_dir_.toStdString(); + auto const settings = tr_sessionLoadSettings(config_dir); + session_ = tr_sessionInit(config_dir, true, settings); rpc_.start(session_); diff --git a/tests/libtransmission/session-test.cc b/tests/libtransmission/session-test.cc index 8ca3b9536..f7ae99da6 100644 --- a/tests/libtransmission/session-test.cc +++ b/tests/libtransmission/session-test.cc @@ -313,7 +313,7 @@ TEST_F(SessionTest, honorsSettings) { settings_map->insert_or_assign(key, true); } - auto* session = tr_sessionInit(sandboxDir().data(), false, settings); + auto* session = tr_sessionInit(sandboxDir(), false, settings); // confirm that these settings were enabled EXPECT_TRUE(session->isPortRandom()); diff --git a/tests/libtransmission/test-fixtures.h b/tests/libtransmission/test-fixtures.h index 28901d22a..3845f2823 100644 --- a/tests/libtransmission/test-fixtures.h +++ b/tests/libtransmission/test-fixtures.h @@ -334,7 +334,7 @@ private: settings_map->try_emplace(TR_KEY_dht_enabled, false); settings_map->try_emplace(TR_KEY_message_level, verbose_ ? TR_LOG_DEBUG : TR_LOG_ERROR); - return tr_sessionInit(sandboxDir().data(), !verbose_, settings); + return tr_sessionInit(sandboxDir(), !verbose_, settings); } static void sessionClose(tr_session* session)