refactor: use fewer raw C strings (#8200)

* refactor: tr_sessionSaveSettings() takes a string_view

* refactor: tr_sessionSetDownloadDir() takes a string_view

* refactor: tr_sessionSetIncompleteDir() takes a string_view

* refactor: tr_sessionSetRPCCWhitelist() takes a string_view

* refactor: tr_sessionSetRPCPassword() takes a string_view

* refactor: tr_sessionSetRPCUsername() takes a string_view

* refactor: tr_sessionSetDefaultTrackers() takes a string_view

* refactor: tr_sessionSetScript() takes a string_view
This commit is contained in:
Charles Kerr
2026-01-22 14:38:20 -06:00
committed by GitHub
parent f319bc6bf6
commit f6e9027da7
9 changed files with 47 additions and 63 deletions

View File

@@ -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);

View File

@@ -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<tr_variant::Map>();
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");

View File

@@ -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:

View File

@@ -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());
}

View File

@@ -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)

View File

@@ -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);

View File

@@ -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);

View File

@@ -219,7 +219,7 @@ void Session::updatePref(int key)
case Prefs::RPC_PASSWORD:
if (session_ != nullptr)
{
tr_sessionSetRPCPassword(session_, prefs_.get<QString>(key).toUtf8().constData());
tr_sessionSetRPCPassword(session_, prefs_.get<QString>(key).toStdString());
}
break;
@@ -235,7 +235,7 @@ void Session::updatePref(int key)
case Prefs::RPC_USERNAME:
if (session_ != nullptr)
{
tr_sessionSetRPCUsername(session_, prefs_.get<QString>(key).toUtf8().constData());
tr_sessionSetRPCUsername(session_, prefs_.get<QString>(key).toStdString());
}
break;
@@ -251,7 +251,7 @@ void Session::updatePref(int key)
case Prefs::RPC_WHITELIST:
if (session_ != nullptr)
{
tr_sessionSetRPCWhitelist(session_, prefs_.get<QString>(key).toUtf8().constData());
tr_sessionSetRPCWhitelist(session_, prefs_.get<QString>(key).toStdString());
}
break;

View File

@@ -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));
}