refactor: remove varargs code in tr_sys_file (#2354)
This commit is contained in:
parent
c832f3c18c
commit
88f9704eed
|
@ -282,22 +282,10 @@ static void printMessage(
|
||||||
char timestr[64];
|
char timestr[64];
|
||||||
tr_logGetTimeStr(timestr, sizeof(timestr));
|
tr_logGetTimeStr(timestr, sizeof(timestr));
|
||||||
|
|
||||||
if (name != nullptr)
|
auto const out = name != nullptr ?
|
||||||
{
|
tr_strvJoin("["sv, timestr, "] "sv, name, " "sv, message, " ("sv, filename, ":"sv, std::to_string(line), ")"sv) :
|
||||||
tr_sys_file_write_fmt(
|
tr_strvJoin("["sv, timestr, "] "sv, message, " ("sv, filename, ":"sv, std::to_string(line), ")"sv);
|
||||||
file,
|
tr_sys_file_write_line(file, out, nullptr);
|
||||||
"[%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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_SYSLOG
|
#ifdef HAVE_SYSLOG
|
||||||
|
@ -687,7 +675,8 @@ static int daemon_start(void* varg, [[maybe_unused]] bool foreground)
|
||||||
|
|
||||||
if (fp != TR_BAD_SYS_FILE)
|
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_sys_file_close(fp, nullptr);
|
||||||
tr_logAddInfo("Saved pidfile \"%s\"", sz_pid_filename.c_str());
|
tr_logAddInfo("Saved pidfile \"%s\"", sz_pid_filename.c_str());
|
||||||
pidfile_created = true;
|
pidfile_created = true;
|
||||||
|
|
|
@ -30,6 +30,8 @@
|
||||||
|
|
||||||
#define dbgmsg(name, ...) tr_logAddDeepNamed(name, __VA_ARGS__)
|
#define dbgmsg(name, ...) tr_logAddDeepNamed(name, __VA_ARGS__)
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
/****
|
/****
|
||||||
*****
|
*****
|
||||||
***** ANNOUNCE
|
***** ANNOUNCE
|
||||||
|
@ -210,9 +212,8 @@ static void on_announce_done(
|
||||||
|
|
||||||
if (response_code != HTTP_OK)
|
if (response_code != HTTP_OK)
|
||||||
{
|
{
|
||||||
char const* fmt = _("Tracker gave HTTP response code %1$ld (%2$s)");
|
auto const* const response_str = tr_webGetResponseStr(response_code);
|
||||||
char const* response_str = tr_webGetResponseStr(response_code);
|
response->errmsg = tr_strvJoin("Tracker HTTP response "sv, std::to_string(response_code), " ("sv, response_str, ")"sv);
|
||||||
response->errmsg = tr_strdup_printf(fmt, response_code, response_str);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdarg>
|
|
||||||
#include <cstring> /* strlen() */
|
#include <cstring> /* strlen() */
|
||||||
|
|
||||||
#include "transmission.h"
|
#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;
|
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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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);
|
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 */
|
/* Directory-related wrappers */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#include "tr-assert.h"
|
#include "tr-assert.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
tr_log_level __tr_message_level = TR_LOG_ERROR;
|
tr_log_level __tr_message_level = TR_LOG_ERROR;
|
||||||
|
|
||||||
static bool myQueueEnabled = false;
|
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)
|
if (buf_len < 0)
|
||||||
{
|
{
|
||||||
goto FINISH;
|
errno = err;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#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));
|
tr_logGetTimeStr(timestr, sizeof(timestr));
|
||||||
|
|
||||||
if (name != nullptr)
|
auto const out = name != nullptr ? tr_strvJoin("["sv, timestr, "] "sv, name, ": "sv, buf) :
|
||||||
{
|
tr_strvJoin("["sv, timestr, "] "sv, buf);
|
||||||
tr_sys_file_write_fmt(fp, "[%s] %s: %s" TR_NATIVE_EOL_STR, nullptr, timestr, name, buf);
|
tr_sys_file_write_line(fp, out, nullptr);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tr_sys_file_write_fmt(fp, "[%s] %s" TR_NATIVE_EOL_STR, nullptr, timestr, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
tr_sys_file_flush(fp, nullptr);
|
tr_sys_file_flush(fp, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FINISH:
|
|
||||||
errno = err;
|
errno = err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -574,17 +574,13 @@ char const* tr_strcasestr(char const* haystack, char const* needle)
|
||||||
|
|
||||||
char* tr_strdup_printf(char const* fmt, ...)
|
char* tr_strdup_printf(char const* fmt, ...)
|
||||||
{
|
{
|
||||||
|
evbuffer* const buf = evbuffer_new();
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
char* const ret = tr_strdup_vprintf(fmt, ap);
|
evbuffer_add_vprintf(buf, fmt, ap);
|
||||||
va_end(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);
|
return evbuffer_free_to_str(buf, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <cstdarg>
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <optional>
|
#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()
|
* @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_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 */
|
/** @brief Portability wrapper for strlcpy() that uses the system implementation if available */
|
||||||
size_t tr_strlcpy(void* dst, void const* src, size_t siz);
|
size_t tr_strlcpy(void* dst, void const* src, size_t siz);
|
||||||
|
|
|
@ -1320,13 +1320,13 @@ TEST_F(FileTest, fileUtilities)
|
||||||
EXPECT_EQ(nullptr, err);
|
EXPECT_EQ(nullptr, err);
|
||||||
EXPECT_TRUE(tr_sys_file_write_line(fd, "qr", &err));
|
EXPECT_TRUE(tr_sys_file_write_line(fd, "qr", &err));
|
||||||
EXPECT_EQ(nullptr, 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_EQ(nullptr, err);
|
||||||
EXPECT_TRUE(tr_sys_file_write_line(fd, "", &err));
|
EXPECT_TRUE(tr_sys_file_write_line(fd, "", &err));
|
||||||
EXPECT_EQ(nullptr, err);
|
EXPECT_EQ(nullptr, err);
|
||||||
EXPECT_TRUE(tr_sys_file_write_line(fd, "", &err));
|
EXPECT_TRUE(tr_sys_file_write_line(fd, "", &err));
|
||||||
EXPECT_EQ(nullptr, 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);
|
EXPECT_EQ(nullptr, err);
|
||||||
|
|
||||||
tr_sys_file_seek(fd, 0, TR_SEEK_SET, nullptr, nullptr);
|
tr_sys_file_seek(fd, 0, TR_SEEK_SET, nullptr, nullptr);
|
||||||
|
|
|
@ -387,29 +387,6 @@ TEST_F(UtilsTest, truncd)
|
||||||
#endif
|
#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)
|
TEST_F(UtilsTest, trStrdupPrintfFmtS)
|
||||||
{
|
{
|
||||||
auto s = makeString(tr_strdup_printf("%s", "test"));
|
auto s = makeString(tr_strdup_printf("%s", "test"));
|
||||||
|
|
Loading…
Reference in New Issue