refactor: tr_rpc_parse_list_str() takes a std::string_view (#1966)
This commit is contained in:
parent
3e7b8eb7bb
commit
7e5e1f3812
|
@ -2838,19 +2838,14 @@ void tr_rpc_request_exec_json(
|
||||||
* - values that are all-digits or commas are number lists
|
* - values that are all-digits or commas are number lists
|
||||||
* - all other values are strings
|
* - 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)
|
auto const values = tr_parseNumberRange(str);
|
||||||
{
|
|
||||||
len = strlen(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto const values = tr_parseNumberRange(std::string_view{ str, len });
|
|
||||||
auto const valueCount = std::size(values);
|
auto const valueCount = std::size(values);
|
||||||
|
|
||||||
if (valueCount == 0)
|
if (valueCount == 0)
|
||||||
{
|
{
|
||||||
tr_variantInitStr(setme, str, len);
|
tr_variantInitStr(setme, std::data(str), std::size(str));
|
||||||
}
|
}
|
||||||
else if (valueCount == 1)
|
else if (valueCount == 1)
|
||||||
{
|
{
|
||||||
|
@ -2900,10 +2895,8 @@ void tr_rpc_request_exec_uri(
|
||||||
bool isArg = key != "method" && key != "tag";
|
bool isArg = key != "method" && key != "tag";
|
||||||
tr_variant* parent = isArg ? args : ⊤
|
tr_variant* parent = isArg ? args : ⊤
|
||||||
|
|
||||||
tr_rpc_parse_list_str(
|
auto const val = std::string_view{ delim + 1, next != nullptr ? (size_t)(next - (delim + 1)) : strlen(delim + 1) };
|
||||||
tr_variantDictAdd(parent, tr_quark_new(key)),
|
tr_rpc_parse_list_str(tr_variantDictAdd(parent, tr_quark_new(key)), val);
|
||||||
delim + 1,
|
|
||||||
next != nullptr ? (size_t)(next - (delim + 1)) : strlen(delim + 1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pch = next != nullptr ? next + 1 : nullptr;
|
pch = next != nullptr ? next + 1 : nullptr;
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
#include "transmission.h"
|
#include "transmission.h"
|
||||||
#include "tr-macros.h"
|
#include "tr-macros.h"
|
||||||
#include "variant.h"
|
#include "variant.h"
|
||||||
|
@ -33,4 +35,4 @@ void tr_rpc_request_exec_uri(
|
||||||
tr_rpc_response_func callback,
|
tr_rpc_response_func callback,
|
||||||
void* callback_user_data);
|
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);
|
||||||
|
|
|
@ -16,8 +16,12 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <string_view>
|
||||||
|
#include <typeinfo>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
namespace libtransmission
|
namespace libtransmission
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -33,19 +37,13 @@ TEST_F(RpcTest, list)
|
||||||
char const* str;
|
char const* str;
|
||||||
tr_variant top;
|
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_variantIsInt(&top));
|
||||||
EXPECT_TRUE(tr_variantGetInt(&top, &i));
|
EXPECT_TRUE(tr_variantGetInt(&top, &i));
|
||||||
EXPECT_EQ(12, i);
|
EXPECT_EQ(12, i);
|
||||||
tr_variantFree(&top);
|
tr_variantFree(&top);
|
||||||
|
|
||||||
tr_rpc_parse_list_str(&top, "12", 1);
|
tr_rpc_parse_list_str(&top, "6,7"sv);
|
||||||
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);
|
|
||||||
EXPECT_TRUE(tr_variantIsList(&top));
|
EXPECT_TRUE(tr_variantIsList(&top));
|
||||||
EXPECT_EQ(2, tr_variantListSize(&top));
|
EXPECT_EQ(2, tr_variantListSize(&top));
|
||||||
EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 0), &i));
|
EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 0), &i));
|
||||||
|
@ -54,14 +52,14 @@ TEST_F(RpcTest, list)
|
||||||
EXPECT_EQ(7, i);
|
EXPECT_EQ(7, i);
|
||||||
tr_variantFree(&top);
|
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_variantIsString(&top));
|
||||||
EXPECT_TRUE(tr_variantGetStr(&top, &str, &len));
|
EXPECT_TRUE(tr_variantGetStr(&top, &str, &len));
|
||||||
EXPECT_EQ(4, len);
|
EXPECT_EQ(4, len);
|
||||||
EXPECT_STREQ("asdf", str);
|
EXPECT_STREQ("asdf", str);
|
||||||
tr_variantFree(&top);
|
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_TRUE(tr_variantIsList(&top));
|
||||||
EXPECT_EQ(4, tr_variantListSize(&top));
|
EXPECT_EQ(4, tr_variantListSize(&top));
|
||||||
EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 0), &i));
|
EXPECT_TRUE(tr_variantGetInt(tr_variantListChild(&top, 0), &i));
|
||||||
|
|
|
@ -601,7 +601,7 @@ static void addIdArg(tr_variant* args, char const* id_str, char const* fallback)
|
||||||
|
|
||||||
if (isNum || isList)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue