refactor: remove varargs code in tr_sys_file (#2354)

This commit is contained in:
Charles Kerr 2021-12-28 09:08:04 -06:00 committed by GitHub
parent c832f3c18c
commit 88f9704eed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 22 additions and 110 deletions

View File

@ -282,22 +282,10 @@ static void printMessage(
char timestr[64];
tr_logGetTimeStr(timestr, sizeof(timestr));
if (name != nullptr)
{
tr_sys_file_write_fmt(
file,
"[%s] %s %s (%s:%d)" TR_NATIVE_EOL_STR,
nullptr,
timestr,
name,
message,
filename,
line);
}
else
{
tr_sys_file_write_fmt(file, "[%s] %s (%s:%d)" TR_NATIVE_EOL_STR, nullptr, timestr, message, filename, line);
}
auto const out = name != nullptr ?
tr_strvJoin("["sv, timestr, "] "sv, name, " "sv, message, " ("sv, filename, ":"sv, std::to_string(line), ")"sv) :
tr_strvJoin("["sv, timestr, "] "sv, message, " ("sv, filename, ":"sv, std::to_string(line), ")"sv);
tr_sys_file_write_line(file, out, nullptr);
}
#ifdef HAVE_SYSLOG
@ -687,7 +675,8 @@ static int daemon_start(void* varg, [[maybe_unused]] bool foreground)
if (fp != TR_BAD_SYS_FILE)
{
tr_sys_file_write_fmt(fp, "%d", nullptr, (int)getpid());
auto const out = std::to_string(getpid());
tr_sys_file_write(fp, std::data(out), std::size(out), nullptr, nullptr);
tr_sys_file_close(fp, nullptr);
tr_logAddInfo("Saved pidfile \"%s\"", sz_pid_filename.c_str());
pidfile_created = true;

View File

@ -30,6 +30,8 @@
#define dbgmsg(name, ...) tr_logAddDeepNamed(name, __VA_ARGS__)
using namespace std::literals;
/****
*****
***** ANNOUNCE
@ -210,9 +212,8 @@ static void on_announce_done(
if (response_code != HTTP_OK)
{
char const* fmt = _("Tracker gave HTTP response code %1$ld (%2$s)");
char const* response_str = tr_webGetResponseStr(response_code);
response->errmsg = tr_strdup_printf(fmt, response_code, response_str);
auto const* const response_str = tr_webGetResponseStr(response_code);
response->errmsg = tr_strvJoin("Tracker HTTP response "sv, std::to_string(response_code), " ("sv, response_str, ")"sv);
}
else
{

View File

@ -7,7 +7,6 @@
*/
#include <algorithm>
#include <cstdarg>
#include <cstring> /* strlen() */
#include "transmission.h"
@ -97,28 +96,3 @@ bool tr_sys_file_write_line(tr_sys_file_t handle, std::string_view buffer, tr_er
return ret;
}
bool tr_sys_file_write_fmt(tr_sys_file_t handle, char const* format, tr_error** error, ...)
{
TR_ASSERT(handle != TR_BAD_SYS_FILE);
TR_ASSERT(format != nullptr);
bool ret = false;
va_list args;
va_start(args, error);
char* const buffer = tr_strdup_vprintf(format, args);
va_end(args);
if (buffer != nullptr)
{
ret = tr_sys_file_write(handle, buffer, strlen(buffer), nullptr, error);
tr_free(buffer);
}
else
{
tr_error_set(error, 0, "Unable to format message."sv);
}
return ret;
}

View File

@ -586,25 +586,6 @@ bool tr_sys_file_read_line(tr_sys_file_t handle, char* buffer, size_t buffer_siz
*/
bool tr_sys_file_write_line(tr_sys_file_t handle, std::string_view buffer, struct tr_error** error);
/**
* @brief Portability wrapper for `fprintf()`.
*
* Special care should be taken when writing to one of standard output streams
* (@ref tr_std_sys_file_t) since no UTF-8 conversion is currently being made.
*
* Writing to other streams (files, pipes) also leaves data untouched, so it
* should already be in UTF-8 encoding, or whichever else you expect.
*
* @param[in] handle Valid file descriptor.
* @param[in] format String format to write.
* @param[out] error Pointer to error object. Optional, pass `nullptr` if you
* are not interested in error details.
* @param[in] ... Format arguments.
*
* @return `True` on success, `false` otherwise (with `error` set accordingly).
*/
bool tr_sys_file_write_fmt(tr_sys_file_t handle, char const* format, struct tr_error** error, ...) TR_GNUC_PRINTF(2, 4);
/* Directory-related wrappers */
/**

View File

@ -19,6 +19,8 @@
#include "tr-assert.h"
#include "utils.h"
using namespace std::literals;
tr_log_level __tr_message_level = TR_LOG_ERROR;
static bool myQueueEnabled = false;
@ -210,7 +212,8 @@ void tr_logAddMessage(char const* file, int line, tr_log_level level, char const
if (buf_len < 0)
{
goto FINISH;
errno = err;
return;
}
#ifdef _WIN32
@ -269,19 +272,12 @@ void tr_logAddMessage(char const* file, int line, tr_log_level level, char const
tr_logGetTimeStr(timestr, sizeof(timestr));
if (name != nullptr)
{
tr_sys_file_write_fmt(fp, "[%s] %s: %s" TR_NATIVE_EOL_STR, nullptr, timestr, name, buf);
}
else
{
tr_sys_file_write_fmt(fp, "[%s] %s" TR_NATIVE_EOL_STR, nullptr, timestr, buf);
}
auto const out = name != nullptr ? tr_strvJoin("["sv, timestr, "] "sv, name, ": "sv, buf) :
tr_strvJoin("["sv, timestr, "] "sv, buf);
tr_sys_file_write_line(fp, out, nullptr);
tr_sys_file_flush(fp, nullptr);
}
}
FINISH:
errno = err;
}

View File

@ -574,17 +574,13 @@ char const* tr_strcasestr(char const* haystack, char const* needle)
char* tr_strdup_printf(char const* fmt, ...)
{
evbuffer* const buf = evbuffer_new();
va_list ap;
va_start(ap, fmt);
char* const ret = tr_strdup_vprintf(fmt, ap);
evbuffer_add_vprintf(buf, fmt, ap);
va_end(ap);
return ret;
}
char* tr_strdup_vprintf(char const* fmt, va_list args)
{
struct evbuffer* buf = evbuffer_new();
evbuffer_add_vprintf(buf, fmt, args);
return evbuffer_free_to_str(buf, nullptr);
}

View File

@ -11,7 +11,6 @@
#include <algorithm>
#include <cctype>
#include <cinttypes>
#include <cstdarg>
#include <cstddef>
#include <ctime>
#include <optional>
@ -235,7 +234,6 @@ std::string evbuffer_free_to_str(evbuffer* buf);
* @return a newly-allocated string that can be freed with tr_free()
*/
char* tr_strdup_printf(char const* fmt, ...) TR_GNUC_MALLOC TR_GNUC_PRINTF(1, 2);
char* tr_strdup_vprintf(char const* fmt, va_list args) TR_GNUC_MALLOC TR_GNUC_PRINTF(1, 0);
/** @brief Portability wrapper for strlcpy() that uses the system implementation if available */
size_t tr_strlcpy(void* dst, void const* src, size_t siz);

View File

@ -1320,13 +1320,13 @@ TEST_F(FileTest, fileUtilities)
EXPECT_EQ(nullptr, err);
EXPECT_TRUE(tr_sys_file_write_line(fd, "qr", &err));
EXPECT_EQ(nullptr, err);
EXPECT_TRUE(tr_sys_file_write_fmt(fd, "s%cu\r\n", &err, 't'));
EXPECT_TRUE(tr_sys_file_write_line(fd, "stu", &err));
EXPECT_EQ(nullptr, err);
EXPECT_TRUE(tr_sys_file_write_line(fd, "", &err));
EXPECT_EQ(nullptr, err);
EXPECT_TRUE(tr_sys_file_write_line(fd, "", &err));
EXPECT_EQ(nullptr, err);
EXPECT_TRUE(tr_sys_file_write_fmt(fd, "v%sy%d", &err, "wx", 2));
EXPECT_TRUE(tr_sys_file_write_line(fd, "vwxy2", &err));
EXPECT_EQ(nullptr, err);
tr_sys_file_seek(fd, 0, TR_SEEK_SET, nullptr, nullptr);

View File

@ -387,29 +387,6 @@ TEST_F(UtilsTest, truncd)
#endif
}
namespace
{
char* testStrdupPrintfValist(char const* fmt, ...) TR_GNUC_PRINTF(1, 2);
char* testStrdupPrintfValist(char const* fmt, ...)
{
va_list args;
va_start(args, fmt);
auto* ret = tr_strdup_vprintf(fmt, args);
va_end(args);
return ret;
}
} // namespace
TEST_F(UtilsTest, trStrdupVprintf)
{
// NOLINTNEXTLINE(cert-dcl50-cpp)
auto s = makeString(testStrdupPrintfValist("\n-%s-%s-%s-\n", "\r", "\t", "\b"));
EXPECT_EQ("\n-\r-\t-\b-\n", s);
}
TEST_F(UtilsTest, trStrdupPrintfFmtS)
{
auto s = makeString(tr_strdup_printf("%s", "test"));