diff --git a/libtransmission/platform.cc b/libtransmission/platform.cc index d580ace82..83de1213e 100644 --- a/libtransmission/platform.cc +++ b/libtransmission/platform.cc @@ -278,9 +278,9 @@ std::string tr_getWebClientDir([[maybe_unused]] tr_session const* session) } /* check calling module place */ - wchar_t wide_module_path[MAX_PATH]; - GetModuleFileNameW(nullptr, wide_module_path, TR_N_ELEMENTS(wide_module_path)); - auto const module_path = tr_win32_native_to_utf8(wide_module_path); + auto wide_module_path = std::array{}; + GetModuleFileNameW(nullptr, std::data(wide_module_path), std::size(wide_module_path)); + auto const module_path = tr_win32_native_to_utf8({ std::data(wide_module_path) }); if (auto const dir = tr_sys_path_dirname(module_path); !std::empty(dir)) { if (auto const path = tr_pathbuf{ dir, "/Web"sv }; isWebClientDir(path)) diff --git a/libtransmission/utils.cc b/libtransmission/utils.cc index 0db5b1287..dad40d3c6 100644 --- a/libtransmission/utils.cc +++ b/libtransmission/utils.cc @@ -978,16 +978,16 @@ int tr_env_get_int(char const* key, int default_value) #ifdef _WIN32 - char value[16]; + auto value = std::array{}; - if (GetEnvironmentVariableA(key, value, TR_N_ELEMENTS(value)) > 1) + if (GetEnvironmentVariableA(key, std::data(value), std::size(value)) > 1) { - return atoi(value); + return atoi(std::data(value)); } #else - if (char const* value = getenv(key); !tr_str_is_empty(value)) + if (char const* const value = getenv(key); !tr_str_is_empty(value)) { return atoi(value); } diff --git a/libtransmission/utils.h b/libtransmission/utils.h index ce85ff5d6..955acbb75 100644 --- a/libtransmission/utils.h +++ b/libtransmission/utils.h @@ -56,8 +56,6 @@ struct tr_error; ***** ****/ -#define TR_N_ELEMENTS(ary) (sizeof(ary) / sizeof(*(ary))) - [[nodiscard]] std::string_view tr_get_mime_type_for_filename(std::string_view filename); /** @@ -80,10 +78,10 @@ constexpr auto tr_saveFile(std::string_view filename, ContiguousRange const& x, * @brief Get disk capacity and free disk space (in bytes) for the specified folder. * @return struct with free and total as zero or positive integer on success, -1 in case of error. */ -tr_disk_space tr_dirSpace(std::string_view directory); +[[nodiscard]] tr_disk_space tr_dirSpace(std::string_view directory); /** @brief return the current date in milliseconds */ -uint64_t tr_time_msec(); +[[nodiscard]] uint64_t tr_time_msec(); /** @brief sleep the specified number of milliseconds */ void tr_wait_msec(long int delay_milliseconds); @@ -96,9 +94,9 @@ template::value, bool> = #ifdef _WIN32 -std::string tr_win32_format_message(uint32_t code); -std::string tr_win32_native_to_utf8(std::wstring_view); -std::wstring tr_win32_utf8_to_native(std::string_view); +[[nodiscard]] std::string tr_win32_format_message(uint32_t code); +[[nodiscard]] std::string tr_win32_native_to_utf8(std::wstring_view); +[[nodiscard]] std::wstring tr_win32_utf8_to_native(std::string_view); int tr_main_win32(int argc, char** argv, int (*real_main)(int, char**)); @@ -120,7 +118,7 @@ int tr_main_win32(int argc, char** argv, int (*real_main)(int, char**)); **** ***/ -constexpr bool tr_str_is_empty(char const* value) +[[nodiscard]] constexpr bool tr_str_is_empty(char const* value) { return value == nullptr || *value == '\0'; } @@ -295,10 +293,10 @@ constexpr void tr_timeUpdate(time_t now) noexcept } /** @brief Portability wrapper for htonll() that uses the system implementation if available */ -uint64_t tr_htonll(uint64_t); +[[nodiscard]] uint64_t tr_htonll(uint64_t); /** @brief Portability wrapper for htonll() that uses the system implementation if available */ -uint64_t tr_ntohll(uint64_t); +[[nodiscard]] uint64_t tr_ntohll(uint64_t); /*** **** @@ -317,40 +315,40 @@ extern size_t tr_mem_K; extern uint64_t tr_size_K; /* unused? */ /* format a speed from KBps into a user-readable string. */ -std::string tr_formatter_speed_KBps(double KBps); +[[nodiscard]] std::string tr_formatter_speed_KBps(double KBps); /* format a memory size from bytes into a user-readable string. */ -std::string tr_formatter_mem_B(size_t bytes); +[[nodiscard]] std::string tr_formatter_mem_B(size_t bytes); /* format a memory size from MB into a user-readable string. */ -static inline std::string tr_formatter_mem_MB(double MBps) +[[nodiscard]] static inline std::string tr_formatter_mem_MB(double MBps) { return tr_formatter_mem_B((size_t)(MBps * tr_mem_K * tr_mem_K)); } /* format a file size from bytes into a user-readable string. */ -std::string tr_formatter_size_B(uint64_t bytes); +[[nodiscard]] std::string tr_formatter_size_B(uint64_t bytes); void tr_formatter_get_units(void* dict); -static inline unsigned int tr_toSpeedBytes(unsigned int KBps) +[[nodiscard]] static inline unsigned int tr_toSpeedBytes(unsigned int KBps) { return KBps * tr_speed_K; } -static inline auto tr_toSpeedKBps(unsigned int Bps) +[[nodiscard]] static inline auto tr_toSpeedKBps(unsigned int Bps) { return Bps / double(tr_speed_K); } -static inline auto tr_toMemBytes(unsigned int MB) +[[nodiscard]] static inline auto tr_toMemBytes(unsigned int MB) { auto B = uint64_t(tr_mem_K) * tr_mem_K; B *= MB; return B; } -static inline auto tr_toMemMB(uint64_t B) +[[nodiscard]] static inline auto tr_toMemMB(uint64_t B) { return int(B / (tr_mem_K * tr_mem_K)); } @@ -360,13 +358,13 @@ static inline auto tr_toMemMB(uint64_t B) ***/ /** @brief Check if environment variable exists. */ -bool tr_env_key_exists(char const* key); +[[nodiscard]] bool tr_env_key_exists(char const* key); /** @brief Get environment variable value as int. */ -int tr_env_get_int(char const* key, int default_value); +[[nodiscard]] int tr_env_get_int(char const* key, int default_value); /** @brief Get environment variable value as string. */ -std::string tr_env_get_string(std::string_view key, std::string_view default_value = {}); +[[nodiscard]] std::string tr_env_get_string(std::string_view key, std::string_view default_value = {}); /*** **** diff --git a/libtransmission/web.cc b/libtransmission/web.cc index d3f1dd58f..29d3312e8 100644 --- a/libtransmission/web.cc +++ b/libtransmission/web.cc @@ -4,6 +4,7 @@ // License text can be found in the licenses/ folder. #include +#include #include #include #include @@ -57,14 +58,14 @@ static CURLcode ssl_context_func(CURL* /*curl*/, void* ssl_ctx, void* /*user_dat return CURLE_OK; } - static LPCWSTR const sys_store_names[] = { + static auto constexpr SysStoreNames = std::array{ L"CA", L"ROOT", }; - for (size_t i = 0; i < TR_N_ELEMENTS(sys_store_names); ++i) + for (auto& sys_store_name : SysStoreNames) { - HCERTSTORE const sys_cert_store = CertOpenSystemStoreW(0, sys_store_names[i]); + HCERTSTORE const sys_cert_store = CertOpenSystemStoreW(0, sys_store_name); if (sys_cert_store == nullptr) { continue; diff --git a/utils/remote.cc b/utils/remote.cc index 5fdfc061e..1cc53a7d1 100644 --- a/utils/remote.cc +++ b/utils/remote.cc @@ -712,14 +712,16 @@ static void addFiles(tr_variant* args, tr_quark const key, char const* arg) } } -static tr_quark const files_keys[] = { +// clang-format off + +static auto constexpr FilesKeys = std::array{ TR_KEY_files, TR_KEY_name, TR_KEY_priorities, TR_KEY_wanted, }; -static tr_quark const details_keys[] = { +static auto constexpr DetailsKeys = std::array{ TR_KEY_activityDate, TR_KEY_addedDate, TR_KEY_bandwidthPriority, @@ -771,26 +773,28 @@ static tr_quark const details_keys[] = { TR_KEY_uploadLimited, TR_KEY_uploadRatio, TR_KEY_webseeds, - TR_KEY_webseedsSendingToUs, + TR_KEY_webseedsSendingToUs }; -static tr_quark const list_keys[] = { - TR_KEY_error, // - TR_KEY_errorString, // - TR_KEY_eta, // - TR_KEY_id, // - TR_KEY_isFinished, // - TR_KEY_leftUntilDone, // - TR_KEY_name, // - TR_KEY_peersGettingFromUs, // - TR_KEY_peersSendingToUs, // - TR_KEY_rateDownload, // - TR_KEY_rateUpload, // - TR_KEY_sizeWhenDone, // - TR_KEY_status, // - TR_KEY_uploadRatio, // +static auto constexpr ListKeys = std::array{ + TR_KEY_error, + TR_KEY_errorString, + TR_KEY_eta, + TR_KEY_id, + TR_KEY_isFinished, + TR_KEY_leftUntilDone, + TR_KEY_name, + TR_KEY_peersGettingFromUs, + TR_KEY_peersSendingToUs, + TR_KEY_rateDownload, + TR_KEY_rateUpload, + TR_KEY_sizeWhenDone, + TR_KEY_status, + TR_KEY_uploadRatio }; +// clang-format on + static size_t writeFunc(void* ptr, size_t size, size_t nmemb, void* vbuf) { auto* const buf = static_cast(vbuf); @@ -2557,9 +2561,9 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv, Co config.filter = optarg; tr_variantDictAddInt(&top, TR_KEY_tag, TAG_FILTER); - for (size_t i = 0; i < TR_N_ELEMENTS(details_keys); ++i) + for (auto const& key : DetailsKeys) { - tr_variantListAddQuark(fields, details_keys[i]); + tr_variantListAddQuark(fields, key); } addIdArg(args, config, "all"); @@ -2567,9 +2571,9 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv, Co case 'i': tr_variantDictAddInt(&top, TR_KEY_tag, TAG_DETAILS); - for (size_t i = 0; i < TR_N_ELEMENTS(details_keys); ++i) + for (auto const& key : DetailsKeys) { - tr_variantListAddQuark(fields, details_keys[i]); + tr_variantListAddQuark(fields, key); } addIdArg(args, config); @@ -2578,9 +2582,9 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv, Co case 'l': tr_variantDictAddInt(&top, TR_KEY_tag, TAG_LIST); - for (size_t i = 0; i < TR_N_ELEMENTS(list_keys); ++i) + for (auto const& key : ListKeys) { - tr_variantListAddQuark(fields, list_keys[i]); + tr_variantListAddQuark(fields, key); } addIdArg(args, config, "all"); @@ -2589,9 +2593,9 @@ static int processArgs(char const* rpcurl, int argc, char const* const* argv, Co case 940: tr_variantDictAddInt(&top, TR_KEY_tag, TAG_FILES); - for (size_t i = 0; i < TR_N_ELEMENTS(files_keys); ++i) + for (auto const& key : FilesKeys) { - tr_variantListAddQuark(fields, files_keys[i]); + tr_variantListAddQuark(fields, key); } addIdArg(args, config);