refactor: tr_variant*Str() functions now take a std::string_view (#1990)

* refactor tr_variant*Str functions now take a std::string_view

* refactor: tr_torrentPrimaryMimeType returns a string-view
This commit is contained in:
Charles Kerr 2021-10-19 21:30:50 -05:00 committed by GitHub
parent 0b1e12ac5b
commit 236a0965fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 130 additions and 121 deletions

View File

@ -10,7 +10,6 @@
#include <stdio.h> /* printf */
#include <stdlib.h> /* atoi */
#include <string_view>
#include <typeinfo>
#ifdef HAVE_SYSLOG
#include <syslog.h>

View File

@ -24,6 +24,7 @@
#include <stdio.h>
#include <stdlib.h> /* strtol() */
#include <string.h>
#include <string_view>
#include <unistd.h>
@ -39,6 +40,8 @@
#define MY_CONFIG_NAME "transmission"
using namespace std::literals;
std::string gl_confdir;
void gtr_pref_init(std::string const& config_dir)
@ -71,12 +74,12 @@ static void tr_prefs_init_defaults(tr_variant* d)
}
tr_variantDictReserve(d, 31);
tr_variantDictAddStr(d, TR_KEY_watch_dir, dir.c_str());
tr_variantDictAddStr(d, TR_KEY_watch_dir, dir);
tr_variantDictAddBool(d, TR_KEY_watch_dir_enabled, false);
tr_variantDictAddBool(d, TR_KEY_user_has_given_informed_consent, false);
tr_variantDictAddBool(d, TR_KEY_inhibit_desktop_hibernation, false);
tr_variantDictAddBool(d, TR_KEY_blocklist_updates_enabled, true);
tr_variantDictAddStr(d, TR_KEY_open_dialog_dir, Glib::get_home_dir().c_str());
tr_variantDictAddStr(d, TR_KEY_open_dialog_dir, Glib::get_home_dir());
tr_variantDictAddBool(d, TR_KEY_show_toolbar, true);
tr_variantDictAddBool(d, TR_KEY_show_filterbar, true);
tr_variantDictAddBool(d, TR_KEY_show_statusbar, true);
@ -85,7 +88,7 @@ static void tr_prefs_init_defaults(tr_variant* d)
tr_variantDictAddBool(d, TR_KEY_show_tracker_scrapes, false);
tr_variantDictAddBool(d, TR_KEY_show_extra_peer_details, false);
tr_variantDictAddBool(d, TR_KEY_show_backup_trackers, false);
tr_variantDictAddStr(d, TR_KEY_statusbar_stats, "total-ratio");
tr_variantDictAddStr(d, TR_KEY_statusbar_stats, "total-ratio"sv);
tr_variantDictAddBool(d, TR_KEY_torrent_added_notification_enabled, true);
tr_variantDictAddBool(d, TR_KEY_torrent_complete_notification_enabled, true);
tr_variantDictAddBool(d, TR_KEY_torrent_complete_sound_enabled, true);
@ -97,8 +100,8 @@ static void tr_prefs_init_defaults(tr_variant* d)
tr_variantDictAddInt(d, TR_KEY_main_window_y, 50);
tr_variantDictAddInt(d, TR_KEY_details_window_height, 500);
tr_variantDictAddInt(d, TR_KEY_details_window_width, 700);
tr_variantDictAddStr(d, TR_KEY_download_dir, dir.c_str());
tr_variantDictAddStr(d, TR_KEY_sort_mode, "sort-by-name");
tr_variantDictAddStr(d, TR_KEY_download_dir, dir);
tr_variantDictAddStr(d, TR_KEY_sort_mode, "sort-by-name"sv);
tr_variantDictAddBool(d, TR_KEY_sort_reversed, false);
tr_variantDictAddBool(d, TR_KEY_compact_view, false);
}
@ -114,11 +117,11 @@ static void ensure_sound_cmd_is_a_list(tr_variant* dict)
tr_variantDictRemove(dict, key);
list = tr_variantDictAddList(dict, key, 5);
tr_variantListAddStr(list, "canberra-gtk-play");
tr_variantListAddStr(list, "-i");
tr_variantListAddStr(list, "complete-download");
tr_variantListAddStr(list, "-d");
tr_variantListAddStr(list, "transmission torrent downloaded");
tr_variantListAddStr(list, "canberra-gtk-play"sv);
tr_variantListAddStr(list, "-i"sv);
tr_variantListAddStr(list, "complete-download"sv);
tr_variantListAddStr(list, "-d"sv);
tr_variantListAddStr(list, "transmission torrent downloaded"sv);
}
static tr_variant* getPrefs()
@ -224,7 +227,7 @@ std::string gtr_pref_string_get(tr_quark const key)
void gtr_pref_string_set(tr_quark const key, std::string const& value)
{
tr_variantDictAddStr(getPrefs(), key, value.c_str());
tr_variantDictAddStr(getPrefs(), key, value);
}
/***

View File

@ -12,6 +12,7 @@
#include <stddef.h>
#include <stdio.h> /* sscanf() */
#include <stdlib.h> /* abort() */
#include <string_view>
#include <unordered_map>
#include <glibmm/i18n.h>
@ -29,6 +30,8 @@
#include "tr-prefs.h"
#include "util.h"
using namespace std::literals;
namespace
{
@ -393,7 +396,7 @@ void DetailsDialog::Impl::torrent_set_bool(tr_quark key, bool value)
tr_variant top;
tr_variantInitDict(&top, 2);
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set");
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set"sv);
tr_variant* const args = tr_variantDictAddDict(&top, TR_KEY_arguments, 2);
tr_variantDictAddBool(args, key, value);
tr_variant* const ids = tr_variantDictAddList(args, TR_KEY_ids, ids_.size());
@ -412,7 +415,7 @@ void DetailsDialog::Impl::torrent_set_int(tr_quark key, int value)
tr_variant top;
tr_variantInitDict(&top, 2);
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set");
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set"sv);
tr_variant* const args = tr_variantDictAddDict(&top, TR_KEY_arguments, 2);
tr_variantDictAddInt(args, key, value);
tr_variant* const ids = tr_variantDictAddList(args, TR_KEY_ids, ids_.size());
@ -431,7 +434,7 @@ void DetailsDialog::Impl::torrent_set_real(tr_quark key, double value)
tr_variant top;
tr_variantInitDict(&top, 2);
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set");
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set"sv);
tr_variant* const args = tr_variantDictAddDict(&top, TR_KEY_arguments, 2);
tr_variantDictAddReal(args, key, value);
tr_variant* const ids = tr_variantDictAddList(args, TR_KEY_ids, ids_.size());
@ -2369,11 +2372,11 @@ void DetailsDialog::Impl::on_add_tracker_response(int response, Gtk::Dialog* dia
tr_variant* trackers;
tr_variantInitDict(&top, 2);
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set");
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set"sv);
args = tr_variantDictAddDict(&top, TR_KEY_arguments, 2);
tr_variantDictAddInt(args, TR_KEY_id, torrent_id);
trackers = tr_variantDictAddList(args, TR_KEY_trackerAdd, 1);
tr_variantListAddStr(trackers, url.c_str());
tr_variantListAddStr(trackers, url.raw());
core_->exec(&top);
refresh();
@ -2439,7 +2442,7 @@ void DetailsDialog::Impl::on_tracker_list_remove_button_clicked()
tr_variant* trackers;
tr_variantInitDict(&top, 2);
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set");
tr_variantDictAddStr(&top, TR_KEY_method, "torrent-set"sv);
args = tr_variantDictAddDict(&top, TR_KEY_arguments, 2);
tr_variantDictAddInt(args, TR_KEY_id, torrent_id);
trackers = tr_variantDictAddList(args, TR_KEY_trackerRemove, 1);

View File

@ -32,6 +32,7 @@
#include <string>
#include <time.h>
#include <vector>
#include <string_view>
#include <giomm.h>
#include <glib/gmessages.h>
@ -60,6 +61,8 @@
#include "tr-window.h"
#include "util.h"
using namespace std::literals;
#define MY_CONFIG_NAME "transmission"
#define MY_READABLE_NAME "transmission-gtk"
@ -1350,7 +1353,7 @@ bool Application::call_rpc_for_selected_torrents(std::string const& method)
auto* session = core_->get_session();
tr_variantInitDict(&top, 2);
tr_variantDictAddStr(&top, TR_KEY_method, method.c_str());
tr_variantDictAddStr(&top, TR_KEY_method, method);
args = tr_variantDictAddDict(&top, TR_KEY_arguments, 1);
ids = tr_variantDictAddList(args, TR_KEY_ids, 0);
sel_->selected_foreach(
@ -1394,7 +1397,7 @@ void Application::start_all_torrents()
tr_variant request;
tr_variantInitDict(&request, 1);
tr_variantDictAddStr(&request, TR_KEY_method, "torrent-start");
tr_variantDictAddStr(&request, TR_KEY_method, "torrent-start"sv);
tr_rpc_request_exec_json(session, &request, nullptr, nullptr);
tr_variantFree(&request);
}
@ -1405,7 +1408,7 @@ void Application::pause_all_torrents()
tr_variant request;
tr_variantInitDict(&request, 1);
tr_variantDictAddStr(&request, TR_KEY_method, "torrent-stop");
tr_variantDictAddStr(&request, TR_KEY_method, "torrent-stop"sv);
tr_rpc_request_exec_json(session, &request, nullptr, nullptr);
tr_variantFree(&request);
}

View File

@ -10,7 +10,6 @@
#include <array>
#include <cstring> /* strlen() */
#include <string_view>
#include <typeinfo>
#include <event2/buffer.h>

View File

@ -11,7 +11,6 @@
#include <cstring> // strlen()
#include <iterator>
#include <string_view>
#include <typeinfo>
#include <vector>
#include "transmission.h"

View File

@ -8,6 +8,7 @@
#include <algorithm>
#include <cstring>
#include <string_view>
#include "transmission.h"
#include "completion.h"
@ -24,6 +25,8 @@
#include "utils.h" /* tr_buildPath */
#include "variant.h"
using namespace std::literals;
namespace
{
@ -108,7 +111,7 @@ static void saveLabels(tr_variant* dict, tr_torrent const* tor)
tr_variant* list = tr_variantDictAddList(dict, TR_KEY_labels, std::size(labels));
for (auto const& label : labels)
{
tr_variantListAddStr(list, label.c_str());
tr_variantListAddStr(list, label);
}
}
@ -467,11 +470,11 @@ static void bitfieldToBenc(Bitfield const* b, tr_variant* benc)
{
if (b->hasAll())
{
tr_variantInitStr(benc, "all", 3);
tr_variantInitStr(benc, "all"sv);
}
else if (b->hasNone())
{
tr_variantInitStr(benc, "none", 4);
tr_variantInitStr(benc, "none"sv);
}
else
{
@ -553,7 +556,7 @@ static void saveProgress(tr_variant* dict, tr_torrent* tor)
/* add the progress */
if (tor->completeness == TR_SEED)
{
tr_variantDictAddStr(prog, TR_KEY_have, "all");
tr_variantDictAddStr(prog, TR_KEY_have, "all"sv);
}
/* add the blocks bitfield */

View File

@ -48,6 +48,8 @@
#define RECENTLY_ACTIVE_SECONDS 60
using namespace std::literals;
#if 0
#define dbgmsg(fmt, ...) fprintf(stderr, "%s:%d " fmt "\n", __FILE__, __LINE__, __VA_ARGS__)
#else
@ -380,7 +382,7 @@ static void addLabels(tr_torrent const* tor, tr_variant* list)
tr_variantInitList(list, std::size(tor->labels));
for (auto const& label : tor->labels)
{
tr_variantListAddStr(list, label.c_str());
tr_variantListAddStr(list, label);
}
}
@ -532,7 +534,7 @@ static void initField(
break;
case TR_KEY_comment:
tr_variantInitStr(initme, inf->comment != nullptr ? inf->comment : "", TR_BAD_SIZE);
tr_variantInitStr(initme, std::string_view{ inf->comment != nullptr ? inf->comment : "" });
break;
case TR_KEY_corruptEver:
@ -540,7 +542,7 @@ static void initField(
break;
case TR_KEY_creator:
tr_variantInitStr(initme, inf->creator != nullptr ? inf->creator : "", TR_BAD_SIZE);
tr_variantInitStr(initme, std::string_view{ inf->creator != nullptr ? inf->creator : "" });
break;
case TR_KEY_dateCreated:
@ -556,7 +558,7 @@ static void initField(
break;
case TR_KEY_downloadDir:
tr_variantInitStr(initme, tr_torrentGetDownloadDir(tor), TR_BAD_SIZE);
tr_variantInitStr(initme, tr_torrentGetDownloadDir(tor));
break;
case TR_KEY_downloadedEver:
@ -576,7 +578,7 @@ static void initField(
break;
case TR_KEY_errorString:
tr_variantInitStr(initme, st->errorString, TR_BAD_SIZE);
tr_variantInitStr(initme, st->errorString);
break;
case TR_KEY_eta:
@ -598,7 +600,7 @@ static void initField(
break;
case TR_KEY_hashString:
tr_variantInitStr(initme, tor->info.hashString, TR_BAD_SIZE);
tr_variantInitStr(initme, tor->info.hashString);
break;
case TR_KEY_haveUnchecked:
@ -651,7 +653,7 @@ static void initField(
case TR_KEY_magnetLink:
str = tr_torrentGetMagnetLink(tor);
tr_variantInitStr(initme, str, TR_BAD_SIZE);
tr_variantInitStr(initme, str);
tr_free(str);
break;
@ -660,7 +662,7 @@ static void initField(
break;
case TR_KEY_name:
tr_variantInitStr(initme, tr_torrentName(tor), TR_BAD_SIZE);
tr_variantInitStr(initme, tr_torrentName(tor));
break;
case TR_KEY_percentDone:
@ -706,12 +708,12 @@ static void initField(
{
auto const bytes = tr_torrentCreatePieceBitfield(tor);
auto* enc = static_cast<char*>(tr_base64_encode(bytes.data(), std::size(bytes), nullptr));
tr_variantInitStr(initme, enc != nullptr ? enc : "", TR_BAD_SIZE);
tr_variantInitStr(initme, enc != nullptr ? std::string_view{ enc } : ""sv);
tr_free(enc);
}
else
{
tr_variantInitStr(initme, "", 0);
tr_variantInitStr(initme, ""sv);
}
break;
@ -725,7 +727,7 @@ static void initField(
break;
case TR_KEY_primary_mime_type:
tr_variantInitStr(initme, tr_torrentPrimaryMimeType(tor), TR_BAD_SIZE);
tr_variantInitStr(initme, tr_torrentPrimaryMimeType(tor));
break;
case TR_KEY_priorities:
@ -813,7 +815,7 @@ static void initField(
}
case TR_KEY_torrentFile:
tr_variantInitStr(initme, inf->torrent, TR_BAD_SIZE);
tr_variantInitStr(initme, inf->torrent);
break;
case TR_KEY_totalSize:
@ -2462,20 +2464,20 @@ static void addSessionField(tr_session* s, tr_variant* d, tr_quark key)
case TR_KEY_encryption:
{
char const* str;
auto str = std::string_view{};
switch (tr_sessionGetEncryption(s))
{
case TR_CLEAR_PREFERRED:
str = "tolerated";
str = "tolerated"sv;
break;
case TR_ENCRYPTION_REQUIRED:
str = "required";
str = "required"sv;
break;
default:
str = "preferred";
str = "preferred"sv;
break;
}
@ -2748,7 +2750,7 @@ void tr_rpc_parse_list_str(tr_variant* setme, std::string_view str)
if (valueCount == 0)
{
tr_variantInitStr(setme, std::data(str), std::size(str));
tr_variantInitStr(setme, str);
}
else if (valueCount == 1)
{

View File

@ -17,7 +17,6 @@
#include <set>
#include <sstream>
#include <string>
#include <typeinfo>
#include <unordered_map>
#include <vector>
@ -3241,24 +3240,23 @@ void tr_torrentSetLocation(
tr_runInEventThread(tor->session, setLocation, data);
}
char const* tr_torrentPrimaryMimeType(tr_torrent const* tor)
std::string_view tr_torrentPrimaryMimeType(tr_torrent const* tor)
{
tr_info const* inf = &tor->info;
// count up how many bytes there are for each mime-type in the torrent
// NB: get_mime_type_for_filename() always returns the same ptr for a
// mime_type, so its raw pointer can be used as a key.
// TODO: tr_get_mime_type_for_filename should return a std::string_view
auto size_per_mime_type = std::unordered_map<char const*, size_t>{};
auto size_per_mime_type = std::unordered_map<std::string_view, size_t>{};
for (tr_file const *it = inf->files, *end = it + inf->fileCount; it != end; ++it)
{
char const* mime_type = tr_get_mime_type_for_filename(it->name);
auto const mime_type = tr_get_mime_type_for_filename(it->name);
size_per_mime_type[mime_type] += it->length;
}
// now that we have the totals,
// sort by number so that we can get the biggest
auto mime_type_per_size = std::map<size_t, char const*>{};
auto mime_type_per_size = std::map<size_t, std::string_view>{};
for (auto it : size_per_mime_type)
{
mime_type_per_size.emplace(it.second, it.first);
@ -3267,9 +3265,9 @@ char const* tr_torrentPrimaryMimeType(tr_torrent const* tor)
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
// application/octet-stream is the default value for all other cases.
// An unknown file type should use this type.
char const* const fallback = "application/octet-stream";
auto constexpr Fallback = "application/octet-stream"sv;
return std::empty(mime_type_per_size) ? fallback : mime_type_per_size.rbegin()->second;
return std::empty(mime_type_per_size) ? Fallback : mime_type_per_size.rbegin()->second;
}
/***

View File

@ -13,6 +13,7 @@
#endif
#include <string>
#include <string_view>
#include <unordered_set>
#include <vector>
@ -112,7 +113,7 @@ void tr_torrentSetDateDone(tr_torrent* torrent, time_t doneDate);
/** Return the mime-type (e.g. "audio/x-flac") that matches more of the
torrent's content than any other mime-type. */
char const* tr_torrentPrimaryMimeType(tr_torrent const* tor);
std::string_view tr_torrentPrimaryMimeType(tr_torrent const* tor);
enum tr_verify_state
{

View File

@ -69,6 +69,8 @@
#include "variant.h"
#include "version.h"
using namespace std::literals;
time_t __tr_current_time = 0;
/***
@ -1864,7 +1866,7 @@ void tr_net_init(void)
/// mime-type
char const* tr_get_mime_type_for_filename(std::string_view filename)
std::string_view tr_get_mime_type_for_filename(std::string_view filename)
{
auto constexpr compare = [](mime_type_suffix const& entry, auto const& suffix)
{
@ -1887,9 +1889,13 @@ char const* tr_get_mime_type_for_filename(std::string_view filename)
auto const it = std::lower_bound(std::begin(mime_type_suffixes), std::end(mime_type_suffixes), suffix_lc, compare);
if (it != std::end(mime_type_suffixes) && suffix_lc == it->suffix)
{
return std::data(it->mime_type);
return it->mime_type;
}
}
return nullptr;
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
// application/octet-stream is the default value.
// An unknown file type should use this type.
auto constexpr Fallback = "application/octet-stream"sv;
return Fallback;
}

View File

@ -62,7 +62,7 @@ char const* tr_strip_positional_args(char const* fmt);
#define TR_N_ELEMENTS(ary) (sizeof(ary) / sizeof(*(ary)))
char const* tr_get_mime_type_for_filename(std::string_view filename);
std::string_view tr_get_mime_type_for_filename(std::string_view filename);
/**
* @brief Rich Salz's classic implementation of shell-style pattern matching for ?, \, [], and * characters.

View File

@ -257,10 +257,10 @@ int tr_variantParseBenc(void const* buf_in, void const* bufend_in, tr_variant* t
}
buf = end;
auto const sv = std::string_view{ reinterpret_cast<char const*>(str), str_len };
if (!key && !std::empty(stack) && tr_variantIsDict(stack.back()))
{
auto const sv = std::string_view{ reinterpret_cast<char const*>(str), str_len };
key = tr_quark_new(sv);
}
else
@ -268,7 +268,7 @@ int tr_variantParseBenc(void const* buf_in, void const* bufend_in, tr_variant* t
tr_variant* const v = get_node(stack, key, top, &err);
if (v != nullptr)
{
tr_variantInitStr(v, str, str_len);
tr_variantInitStr(v, sv);
}
}
}

View File

@ -308,7 +308,7 @@ static void action_callback_POP(
{
auto len = size_t{};
char const* str = extract_string(jsn, state, &len, data->strbuf);
tr_variantInitStr(get_node(jsn), str, len);
tr_variantInitStr(get_node(jsn), { str, len });
data->has_content = true;
}
else if (state->type == JSONSL_T_HKEY)

View File

@ -173,25 +173,19 @@ static void tr_variant_string_set_quark(struct tr_variant_string* str, tr_quark
str->str.str = tr_quark_get_string(quark, &str->len);
}
static void tr_variant_string_set_string(struct tr_variant_string* str, char const* bytes, size_t len)
static void tr_variant_string_set_string(struct tr_variant_string* str, std::string_view in)
{
tr_variant_string_clear(str);
if (bytes == nullptr)
{
len = 0;
}
else if (len == TR_BAD_SIZE)
{
len = strlen(bytes);
}
auto const* const bytes = std::data(in);
auto const len = std::size(in);
if (len < sizeof(str->str.buf))
{
str->type = TR_STRING_TYPE_BUF;
if (len > 0)
{
memcpy(str->str.buf, bytes, len);
std::copy_n(bytes, len, str->str.buf);
}
str->str.buf[len] = '\0';
@ -200,7 +194,7 @@ static void tr_variant_string_set_string(struct tr_variant_string* str, char con
else
{
auto* tmp = tr_new(char, len + 1);
memcpy(tmp, bytes, len);
std::copy_n(bytes, len, tmp);
tmp[len] = '\0';
str->type = TR_STRING_TYPE_HEAP;
str->str.str = tmp;
@ -445,7 +439,7 @@ bool tr_variantDictFindRaw(tr_variant* dict, tr_quark const key, uint8_t const**
void tr_variantInitRaw(tr_variant* v, void const* src, size_t byteCount)
{
tr_variantInit(v, TR_VARIANT_TYPE_STR);
tr_variant_string_set_string(&v->val.s, static_cast<char const*>(src), byteCount);
tr_variant_string_set_string(&v->val.s, { static_cast<char const*>(src), byteCount });
}
void tr_variantInitQuark(tr_variant* v, tr_quark const q)
@ -454,10 +448,10 @@ void tr_variantInitQuark(tr_variant* v, tr_quark const q)
tr_variant_string_set_quark(&v->val.s, q);
}
void tr_variantInitStr(tr_variant* v, void const* str, size_t len)
void tr_variantInitStr(tr_variant* v, std::string_view str)
{
tr_variantInit(v, TR_VARIANT_TYPE_STR);
tr_variant_string_set_string(&v->val.s, static_cast<char const*>(str), len);
tr_variant_string_set_string(&v->val.s, str);
}
void tr_variantInitBool(tr_variant* v, bool value)
@ -559,10 +553,10 @@ tr_variant* tr_variantListAddBool(tr_variant* list, bool val)
return child;
}
tr_variant* tr_variantListAddStr(tr_variant* list, char const* val)
tr_variant* tr_variantListAddStr(tr_variant* list, std::string_view str)
{
tr_variant* child = tr_variantListAdd(list);
tr_variantInitStr(child, val, TR_BAD_SIZE);
tr_variantInitStr(child, str);
return child;
}
@ -661,10 +655,10 @@ tr_variant* tr_variantDictAddQuark(tr_variant* dict, tr_quark const key, tr_quar
return child;
}
tr_variant* tr_variantDictAddStr(tr_variant* dict, tr_quark const key, char const* val)
tr_variant* tr_variantDictAddStr(tr_variant* dict, tr_quark const key, std::string_view str)
{
tr_variant* child = dictFindOrAdd(dict, key, TR_VARIANT_TYPE_STR);
tr_variantInitStr(child, val, TR_BAD_SIZE);
tr_variantInitStr(child, str);
return child;
}

View File

@ -169,7 +169,7 @@ constexpr bool tr_variantIsString(tr_variant const* b)
bool tr_variantGetStr(tr_variant const* variant, char const** setme_str, size_t* setme_len);
void tr_variantInitStr(tr_variant* initme, void const* str, size_t str_len);
void tr_variantInitStr(tr_variant* initme, std::string_view);
void tr_variantInitQuark(tr_variant* initme, tr_quark const quark);
void tr_variantInitRaw(tr_variant* initme, void const* raw, size_t raw_len);
@ -227,7 +227,7 @@ tr_variant* tr_variantListAdd(tr_variant* list);
tr_variant* tr_variantListAddBool(tr_variant* list, bool addme);
tr_variant* tr_variantListAddInt(tr_variant* list, int64_t addme);
tr_variant* tr_variantListAddReal(tr_variant* list, double addme);
tr_variant* tr_variantListAddStr(tr_variant* list, char const* addme);
tr_variant* tr_variantListAddStr(tr_variant* list, std::string_view);
tr_variant* tr_variantListAddQuark(tr_variant* list, tr_quark const addme);
tr_variant* tr_variantListAddRaw(tr_variant* list, void const* addme_value, size_t addme_len);
tr_variant* tr_variantListAddList(tr_variant* list, size_t reserve_count);
@ -254,7 +254,7 @@ tr_variant* tr_variantDictAdd(tr_variant* dict, tr_quark const key);
tr_variant* tr_variantDictAddReal(tr_variant* dict, tr_quark const key, double value);
tr_variant* tr_variantDictAddInt(tr_variant* dict, tr_quark const key, int64_t value);
tr_variant* tr_variantDictAddBool(tr_variant* dict, tr_quark const key, bool value);
tr_variant* tr_variantDictAddStr(tr_variant* dict, tr_quark const key, char const* value);
tr_variant* tr_variantDictAddStr(tr_variant* dict, tr_quark const key, std::string_view);
tr_variant* tr_variantDictAddQuark(tr_variant* dict, tr_quark const key, tr_quark const val);
tr_variant* tr_variantDictAddList(tr_variant* dict, tr_quark const key, size_t reserve_count);
tr_variant* tr_variantDictAddDict(tr_variant* dict, tr_quark const key, size_t reserve_count);

View File

@ -223,7 +223,7 @@ void variantInit(tr_variant* init_me, QString const& value)
void variantInit(tr_variant* init_me, std::string_view value)
{
tr_variantInitStr(init_me, std::data(value), std::size(value));
tr_variantInitStr(init_me, value);
}
} // namespace trqt::variant_helpers

View File

@ -8,6 +8,11 @@
#define LIBTRANSMISSION_VARIANT_MODULE
#include <clocale> // setlocale()
#include <cstring> // strlen()
#include <string>
#include <string_view>
#include "transmission.h"
#include "utils.h" // tr_free()
#include "variant.h"
@ -15,12 +20,6 @@
#include "gtest/gtest.h"
#include <clocale> // setlocale()
#include <cstring> // strlen()
#include <string>
#include <string_view>
#include <typeinfo> // sv for string_views
using namespace std::literals;
class JSONTest : public ::testing::TestWithParam<char const*>

View File

@ -17,7 +17,6 @@
#include <array>
#include <set>
#include <string_view>
#include <typeinfo>
#include <vector>
using namespace std::literals;

View File

@ -7,7 +7,6 @@
*/
#include <string_view>
#include <typeinfo>
#ifdef _WIN32
#include <windows.h>
@ -401,9 +400,9 @@ TEST_F(UtilsTest, env)
TEST_F(UtilsTest, mimeTypes)
{
EXPECT_STREQ("audio/x-flac", tr_get_mime_type_for_filename("music.flac"));
EXPECT_STREQ("audio/x-flac", tr_get_mime_type_for_filename("music.FLAC"));
EXPECT_STREQ("video/x-msvideo", tr_get_mime_type_for_filename(".avi"));
EXPECT_STREQ("video/x-msvideo", tr_get_mime_type_for_filename("/path/to/FILENAME.AVI"));
EXPECT_EQ(nullptr, tr_get_mime_type_for_filename("music.ajoijfeisfe"));
EXPECT_EQ("audio/x-flac"sv, tr_get_mime_type_for_filename("music.flac"sv));
EXPECT_EQ("audio/x-flac"sv, tr_get_mime_type_for_filename("music.FLAC"sv));
EXPECT_EQ("video/x-msvideo"sv, tr_get_mime_type_for_filename(".avi"sv));
EXPECT_EQ("video/x-msvideo"sv, tr_get_mime_type_for_filename("/path/to/FILENAME.AVI"sv));
EXPECT_EQ("application/octet-stream"sv, tr_get_mime_type_for_filename("music.ajoijfeisfe"sv));
}

View File

@ -19,7 +19,6 @@
#include <cctype> // isspace()
#include <string>
#include <string_view>
#include <typeinfo>
#include "gtest/gtest.h"

View File

@ -210,7 +210,7 @@ static bool replaceURL(tr_variant* metainfo, char const* in, char const* out)
char* newstr = replaceSubstr(str, in, out);
printf("\tReplaced in \"announce-list\" tier %d: \"%s\" --> \"%s\"\n", tierCount + 1, str, newstr);
tr_variantFree(node);
tr_variantInitStr(node, newstr, TR_BAD_SIZE);
tr_variantInitStr(node, newstr);
tr_free(newstr);
changed = true;
}

View File

@ -13,6 +13,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* strcmp */
#include <string_view>
#include <event2/buffer.h>
#include <event2/util.h>
@ -55,6 +56,8 @@
#define SPEED_G_STR "GB/s"
#define SPEED_T_STR "TB/s"
using namespace std::literals;
/***
****
**** Display Utilities
@ -587,7 +590,7 @@ static void addIdArg(tr_variant* args, char const* id_str, char const* fallback)
if (tr_strcmp0(id_str, "active") == 0)
{
tr_variantDictAddStr(args, TR_KEY_ids, "recently-active");
tr_variantDictAddStr(args, TR_KEY_ids, "recently-active"sv);
}
else if (strcmp(id_str, "all") != 0)
{
@ -2287,7 +2290,7 @@ static tr_variant* ensure_sset(tr_variant** sset)
{
*sset = tr_new0(tr_variant, 1);
tr_variantInitDict(*sset, 3);
tr_variantDictAddStr(*sset, TR_KEY_method, "session-set");
tr_variantDictAddStr(*sset, TR_KEY_method, "session-set"sv);
args = tr_variantDictAddDict(*sset, ARGUMENTS, 0);
}
@ -2306,7 +2309,7 @@ static tr_variant* ensure_tset(tr_variant** tset)
{
*tset = tr_new0(tr_variant, 1);
tr_variantInitDict(*tset, 3);
tr_variantDictAddStr(*tset, TR_KEY_method, "torrent-set");
tr_variantDictAddStr(*tset, TR_KEY_method, "torrent-set"sv);
args = tr_variantDictAddDict(*tset, ARGUMENTS, 1);
}
@ -2351,7 +2354,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
tadd = tr_new0(tr_variant, 1);
tr_variantInitDict(tadd, 3);
tr_variantDictAddStr(tadd, TR_KEY_method, "torrent-add");
tr_variantDictAddStr(tadd, TR_KEY_method, "torrent-add"sv);
tr_variantDictAddInt(tadd, TR_KEY_tag, TAG_TORRENT_ADD);
tr_variantDictAddDict(tadd, ARGUMENTS, 0);
break;
@ -2440,7 +2443,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
tr_variant* args;
tr_variant* fields;
tr_variantInitDict(top, 3);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-get");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-get"sv);
args = tr_variantDictAddDict(top, ARGUMENTS, 0);
fields = tr_variantDictAddList(args, TR_KEY_fields, 0);
@ -2487,20 +2490,20 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
case 941:
tr_variantDictAddInt(top, TR_KEY_tag, TAG_PEERS);
tr_variantListAddStr(fields, "peers");
tr_variantListAddStr(fields, "peers"sv);
addIdArg(args, id, nullptr);
break;
case 942:
tr_variantDictAddInt(top, TR_KEY_tag, TAG_PIECES);
tr_variantListAddStr(fields, "pieces");
tr_variantListAddStr(fields, "pieceCount");
tr_variantListAddStr(fields, "pieces"sv);
tr_variantListAddStr(fields, "pieceCount"sv);
addIdArg(args, id, nullptr);
break;
case 943:
tr_variantDictAddInt(top, TR_KEY_tag, TAG_TRACKERS);
tr_variantListAddStr(fields, "trackerStats");
tr_variantListAddStr(fields, "trackerStats"sv);
addIdArg(args, id, nullptr);
break;
@ -2575,15 +2578,15 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
break;
case 910:
tr_variantDictAddStr(args, TR_KEY_encryption, "required");
tr_variantDictAddStr(args, TR_KEY_encryption, "required"sv);
break;
case 911:
tr_variantDictAddStr(args, TR_KEY_encryption, "preferred");
tr_variantDictAddStr(args, TR_KEY_encryption, "preferred"sv);
break;
case 912:
tr_variantDictAddStr(args, TR_KEY_encryption, "tolerated");
tr_variantDictAddStr(args, TR_KEY_encryption, "tolerated"sv);
break;
case 'm':
@ -2857,7 +2860,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
tr_variant* args;
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-set-location");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-set-location"sv);
args = tr_variantDictAddDict(top, ARGUMENTS, 3);
tr_variantDictAddStr(args, TR_KEY_location, optarg);
tr_variantDictAddBool(args, TR_KEY_move, false);
@ -2874,7 +2877,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "session-get");
tr_variantDictAddStr(top, TR_KEY_method, "session-get"sv);
tr_variantDictAddInt(top, TR_KEY_tag, TAG_SESSION);
status |= flush(rpcurl, &top);
break;
@ -2890,7 +2893,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-start");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-start"sv);
addIdArg(tr_variantDictAddDict(top, ARGUMENTS, 1), id, nullptr);
status |= flush(rpcurl, &top);
}
@ -2908,7 +2911,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-stop");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-stop"sv);
addIdArg(tr_variantDictAddDict(top, ARGUMENTS, 1), id, nullptr);
status |= flush(rpcurl, &top);
}
@ -2927,7 +2930,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 1);
tr_variantDictAddStr(top, TR_KEY_method, "session-close");
tr_variantDictAddStr(top, TR_KEY_method, "session-close"sv);
status |= flush(rpcurl, &top);
break;
}
@ -2936,7 +2939,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 1);
tr_variantDictAddStr(top, TR_KEY_method, "blocklist-update");
tr_variantDictAddStr(top, TR_KEY_method, "blocklist-update"sv);
status |= flush(rpcurl, &top);
break;
}
@ -2945,7 +2948,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "session-stats");
tr_variantDictAddStr(top, TR_KEY_method, "session-stats"sv);
tr_variantDictAddInt(top, TR_KEY_tag, TAG_STATS);
status |= flush(rpcurl, &top);
break;
@ -2955,7 +2958,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
{
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "port-test");
tr_variantDictAddStr(top, TR_KEY_method, "port-test"sv);
tr_variantDictAddInt(top, TR_KEY_tag, TAG_PORTTEST);
status |= flush(rpcurl, &top);
break;
@ -2973,7 +2976,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-reannounce");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-reannounce"sv);
addIdArg(tr_variantDictAddDict(top, ARGUMENTS, 1), id, nullptr);
status |= flush(rpcurl, &top);
break;
@ -2991,7 +2994,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-verify");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-verify"sv);
addIdArg(tr_variantDictAddDict(top, ARGUMENTS, 1), id, nullptr);
status |= flush(rpcurl, &top);
break;
@ -3003,7 +3006,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
tr_variant* args;
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-remove");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-remove"sv);
args = tr_variantDictAddDict(top, ARGUMENTS, 2);
tr_variantDictAddBool(args, TR_KEY_delete_local_data, c == 840);
addIdArg(args, id, nullptr);
@ -3016,7 +3019,7 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv)
tr_variant* args;
tr_variant* top = tr_new0(tr_variant, 1);
tr_variantInitDict(top, 2);
tr_variantDictAddStr(top, TR_KEY_method, "torrent-set-location");
tr_variantDictAddStr(top, TR_KEY_method, "torrent-set-location"sv);
args = tr_variantDictAddDict(top, ARGUMENTS, 3);
tr_variantDictAddStr(args, TR_KEY_location, optarg);
tr_variantDictAddBool(args, TR_KEY_move, true);