From 7e5e1f38124733f7298685439eb31922bdf1224d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 15 Oct 2021 18:34:22 -0500 Subject: [PATCH] refactor: tr_rpc_parse_list_str() takes a std::string_view (#1966) --- libtransmission/rpcimpl.cc | 17 +++++------------ libtransmission/rpcimpl.h | 4 +++- tests/libtransmission/rpc-test.cc | 18 ++++++++---------- utils/remote.cc | 2 +- 4 files changed, 17 insertions(+), 24 deletions(-) diff --git a/libtransmission/rpcimpl.cc b/libtransmission/rpcimpl.cc index 528181bce..e5c8b1a21 100644 --- a/libtransmission/rpcimpl.cc +++ b/libtransmission/rpcimpl.cc @@ -2838,19 +2838,14 @@ void tr_rpc_request_exec_json( * - values that are all-digits or commas are number lists * - all other values are strings */ -void tr_rpc_parse_list_str(tr_variant* setme, char const* str, size_t len) +void tr_rpc_parse_list_str(tr_variant* setme, std::string_view str) { - if (len == TR_BAD_SIZE) - { - len = strlen(str); - } - - auto const values = tr_parseNumberRange(std::string_view{ str, len }); + auto const values = tr_parseNumberRange(str); auto const valueCount = std::size(values); if (valueCount == 0) { - tr_variantInitStr(setme, str, len); + tr_variantInitStr(setme, std::data(str), std::size(str)); } else if (valueCount == 1) { @@ -2900,10 +2895,8 @@ void tr_rpc_request_exec_uri( bool isArg = key != "method" && key != "tag"; tr_variant* parent = isArg ? args : ⊤ - tr_rpc_parse_list_str( - tr_variantDictAdd(parent, tr_quark_new(key)), - delim + 1, - next != nullptr ? (size_t)(next - (delim + 1)) : strlen(delim + 1)); + auto const val = std::string_view{ delim + 1, next != nullptr ? (size_t)(next - (delim + 1)) : strlen(delim + 1) }; + tr_rpc_parse_list_str(tr_variantDictAdd(parent, tr_quark_new(key)), val); } pch = next != nullptr ? next + 1 : nullptr; diff --git a/libtransmission/rpcimpl.h b/libtransmission/rpcimpl.h index ff9043d87..f922beebc 100644 --- a/libtransmission/rpcimpl.h +++ b/libtransmission/rpcimpl.h @@ -8,6 +8,8 @@ #pragma once +#include + #include "transmission.h" #include "tr-macros.h" #include "variant.h" @@ -33,4 +35,4 @@ void tr_rpc_request_exec_uri( tr_rpc_response_func callback, void* callback_user_data); -void tr_rpc_parse_list_str(tr_variant* setme, char const* list_str, size_t list_str_len); +void tr_rpc_parse_list_str(tr_variant* setme, std::string_view str); diff --git a/tests/libtransmission/rpc-test.cc b/tests/libtransmission/rpc-test.cc index 2a10c3b71..76b643fe6 100644 --- a/tests/libtransmission/rpc-test.cc +++ b/tests/libtransmission/rpc-test.cc @@ -16,8 +16,12 @@ #include #include #include +#include +#include #include +using namespace std::literals; + namespace libtransmission { @@ -33,19 +37,13 @@ TEST_F(RpcTest, list) char const* str; tr_variant top; - tr_rpc_parse_list_str(&top, "12", TR_BAD_SIZE); + tr_rpc_parse_list_str(&top, "12"sv); EXPECT_TRUE(tr_variantIsInt(&top)); EXPECT_TRUE(tr_variantGetInt(&top, &i)); EXPECT_EQ(12, i); tr_variantFree(&top); - tr_rpc_parse_list_str(&top, "12", 1); - EXPECT_TRUE(tr_variantIsInt(&top)); - EXPECT_TRUE(tr_variantGetInt(&top, &i)); - EXPECT_EQ(1, i); - tr_variantFree(&top); - - tr_rpc_parse_list_str(&top, "6,7", TR_BAD_SIZE); + tr_rpc_parse_list_str(&top, "6,7"sv); EXPECT_TRUE(tr_variantIsList(&top)); EXPECT_EQ(2, tr_variantListSize(&top)); EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 0), &i)); @@ -54,14 +52,14 @@ TEST_F(RpcTest, list) EXPECT_EQ(7, i); tr_variantFree(&top); - tr_rpc_parse_list_str(&top, "asdf", TR_BAD_SIZE); + tr_rpc_parse_list_str(&top, "asdf"sv); EXPECT_TRUE(tr_variantIsString(&top)); EXPECT_TRUE(tr_variantGetStr(&top, &str, &len)); EXPECT_EQ(4, len); EXPECT_STREQ("asdf", str); tr_variantFree(&top); - tr_rpc_parse_list_str(&top, "1,3-5", TR_BAD_SIZE); + tr_rpc_parse_list_str(&top, "1,3-5"sv); EXPECT_TRUE(tr_variantIsList(&top)); EXPECT_EQ(4, tr_variantListSize(&top)); EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 0), &i)); diff --git a/utils/remote.cc b/utils/remote.cc index 08acf0ddc..59190f49a 100644 --- a/utils/remote.cc +++ b/utils/remote.cc @@ -601,7 +601,7 @@ static void addIdArg(tr_variant* args, char const* id_str, char const* fallback) if (isNum || isList) { - tr_rpc_parse_list_str(tr_variantDictAdd(args, TR_KEY_ids), id_str, strlen(id_str)); + tr_rpc_parse_list_str(tr_variantDictAdd(args, TR_KEY_ids), id_str); } else {