refactor: add tr_error_set_from_errno() (#4662)

This commit is contained in:
Charles Kerr
2023-01-25 12:20:10 -06:00
committed by GitHub
parent c7b9eaff12
commit c81d0b130c
8 changed files with 53 additions and 53 deletions

View File

@@ -49,6 +49,11 @@ void tr_error_set(tr_error** error, int code, std::string_view message)
*error = new tr_error{ code, tr_strvdup(message) };
}
void tr_error_set_from_errno(tr_error** error, int errnum)
{
tr_error_set(error, errnum, tr_strerror(errnum));
}
void tr_error_propagate(tr_error** new_error, tr_error** old_error)
{
TR_ASSERT(old_error != nullptr);

View File

@@ -41,6 +41,11 @@ void tr_error_free(tr_error* error);
*/
void tr_error_set(tr_error** error, int code, std::string_view message);
/**
* @brief shorthand for `tr_error_set(error, errno, tr_strerror(errno))`
*/
void tr_error_set_from_errno(tr_error** error, int errnum);
/**
* @brief Propagate existing error object upwards.
*

View File

@@ -52,12 +52,12 @@
#include <fmt/format.h>
#include "transmission.h"
#include "error.h"
#include "file.h"
#include "log.h"
#include "tr-assert.h"
#include "tr-strbuf.h"
#include "utils.h" // for _(), tr_strerror()
#ifndef O_LARGEFILE
#define O_LARGEFILE 0
@@ -99,21 +99,11 @@ using namespace std::literals;
namespace
{
void set_system_error(tr_error** error, int code)
{
if (error == nullptr)
{
return;
}
tr_error_set(error, code, tr_strerror(code));
}
void set_system_error_if_file_found(tr_error** error, int code)
{
if (code != ENOENT)
{
set_system_error(error, code);
tr_error_set_from_errno(error, code);
}
}
@@ -178,7 +168,7 @@ std::optional<tr_sys_path_info> tr_sys_path_get_info(std::string_view path, int
if (!ok)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return {};
}
@@ -239,7 +229,7 @@ std::string tr_sys_path_resolve(std::string_view path, tr_error** error)
return ret;
}
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return {};
}
@@ -326,7 +316,7 @@ bool tr_sys_path_rename(char const* src_path, char const* dst_path, tr_error** e
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -343,7 +333,7 @@ bool tr_sys_path_copy(char const* src_path, char const* dst_path, tr_error** err
#if defined(USE_COPYFILE)
if (copyfile(src_path, dst_path, nullptr, COPYFILE_CLONE | COPYFILE_ALL) < 0)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return false;
}
@@ -399,7 +389,7 @@ bool tr_sys_path_copy(char const* src_path, char const* dst_path, tr_error** err
errno_cpy = errno; /* remember me for later */
if (errno != EXDEV) /* EXDEV is expected, don't log error */
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
if (file_size > 0U)
{
@@ -435,7 +425,7 @@ bool tr_sys_path_copy(char const* src_path, char const* dst_path, tr_error** err
{
if (errno_cpy == 0)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
}
else
@@ -449,7 +439,7 @@ bool tr_sys_path_copy(char const* src_path, char const* dst_path, tr_error** err
if (copied == -1)
{
errno_cpy = errno; /* remember me for later */
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
if (file_size > 0U)
{
file_size = info->size; /* restore file_size for next fallback */
@@ -483,7 +473,7 @@ bool tr_sys_path_copy(char const* src_path, char const* dst_path, tr_error** err
{
if (errno_cpy == 0)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
}
else
@@ -536,7 +526,7 @@ bool tr_sys_path_remove(char const* path, tr_error** error)
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -567,7 +557,7 @@ tr_sys_file_t tr_sys_file_get_std(tr_std_sys_file_t std_file, tr_error** error)
default:
TR_ASSERT_MSG(false, fmt::format(FMT_STRING("unknown standard file {:d}"), std_file));
set_system_error(error, EINVAL);
tr_error_set_from_errno(error, EINVAL);
}
return ret;
@@ -616,7 +606,7 @@ tr_sys_file_t tr_sys_file_open(char const* path, int flags, int permissions, tr_
}
else
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -630,7 +620,7 @@ tr_sys_file_t tr_sys_file_open_temp(char* path_template, tr_error** error)
if (ret == TR_BAD_SYS_FILE)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
set_file_for_single_pass(ret);
@@ -646,7 +636,7 @@ bool tr_sys_file_close(tr_sys_file_t handle, tr_error** error)
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -673,7 +663,7 @@ bool tr_sys_file_read(tr_sys_file_t handle, void* buffer, uint64_t size, uint64_
}
else
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -717,7 +707,7 @@ bool tr_sys_file_read_at(
}
else if (my_bytes_read == -1)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -744,7 +734,7 @@ bool tr_sys_file_write(tr_sys_file_t handle, void const* buffer, uint64_t size,
}
else
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -788,7 +778,7 @@ bool tr_sys_file_write_at(
}
else
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -802,7 +792,7 @@ bool tr_sys_file_flush(tr_sys_file_t handle, tr_error** error)
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -817,7 +807,7 @@ bool tr_sys_file_flush_possible(tr_sys_file_t handle, tr_error** error)
return S_ISREG(statbuf.st_mode);
}
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return false;
}
@@ -829,7 +819,7 @@ bool tr_sys_file_truncate(tr_sys_file_t handle, uint64_t size, tr_error** error)
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -858,7 +848,7 @@ bool tr_sys_file_advise(
if (int const code = posix_fadvise(handle, offset, size, native_advice); code != 0)
{
set_system_error(error, code);
tr_error_set_from_errno(error, code);
ret = false;
}
@@ -874,7 +864,7 @@ bool tr_sys_file_advise(
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
}
@@ -1000,7 +990,7 @@ bool tr_sys_file_preallocate(tr_sys_file_t handle, uint64_t size, int flags, tr_
}
}
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return false;
}
@@ -1082,7 +1072,7 @@ bool tr_sys_file_lock([[maybe_unused]] tr_sys_file_t handle, [[maybe_unused]] in
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -1102,7 +1092,7 @@ std::string tr_sys_dir_get_current(tr_error** error)
if (errno != ERANGE)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return {};
}
@@ -1130,7 +1120,7 @@ namespace
}
if (!info && mkdir(subpath, permissions) == -1)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return false;
}
if (end == std::string_view::npos)
@@ -1186,7 +1176,7 @@ bool tr_sys_dir_create(char const* path, int flags, int permissions, tr_error**
}
else
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
}
@@ -1209,7 +1199,7 @@ bool tr_sys_dir_create_temp(char* path_template, tr_error** error)
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -1223,7 +1213,7 @@ tr_sys_dir_t tr_sys_dir_open(char const* path, tr_error** error)
if (ret == nullptr)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
return TR_BAD_SYS_DIR;
}
@@ -1244,7 +1234,7 @@ char const* tr_sys_dir_read_name(tr_sys_dir_t handle, tr_error** error)
}
else if (errno != 0)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;
@@ -1258,7 +1248,7 @@ bool tr_sys_dir_close(tr_sys_dir_t handle, tr_error** error)
if (!ret)
{
set_system_error(error, errno);
tr_error_set_from_errno(error, errno);
}
return ret;

View File

@@ -24,7 +24,7 @@
#include "makemeta.h"
#include "session.h" // TR_NAME
#include "tr-assert.h"
#include "utils.h"
#include "utils.h" // for _()
#include "variant.h"
#include "version.h"
@@ -176,7 +176,7 @@ bool tr_metainfo_builder::blockingMakeChecksums(tr_error** error)
if (totalSize() == 0U)
{
tr_error_set(error, ENOENT, tr_strerror(ENOENT));
tr_error_set_from_errno(error, ENOENT);
return false;
}
@@ -265,7 +265,7 @@ bool tr_metainfo_builder::blockingMakeChecksums(tr_error** error)
if (cancel_)
{
tr_error_set(error, ECANCELED, tr_strerror(ECANCELED));
tr_error_set_from_errno(error, ECANCELED);
return false;
}
@@ -284,7 +284,7 @@ std::string tr_metainfo_builder::benc(tr_error** error) const
if (totalSize() == 0)
{
tr_error_set(error, ENOENT, tr_strerror(ENOENT));
tr_error_set_from_errno(error, ENOENT);
return {};
}

View File

@@ -20,7 +20,7 @@
#include "block-info.h"
#include "file.h"
#include "torrent-files.h"
#include "utils.h" // tr_saveFile()
#include "utils.h" // for tr_saveFile()
class tr_metainfo_builder
{

View File

@@ -25,7 +25,7 @@
#include "peer-io.h"
#include "tr-assert.h"
#include "tr-utp.h"
#include "utils.h"
#include "utils.h" // for _()
#ifdef _WIN32
#undef EAGAIN
@@ -660,7 +660,7 @@ void tr_peerIo::on_utp_state_change(int state)
else if (state == UTP_STATE_EOF)
{
tr_error* error = nullptr;
tr_error_set(&error, ENOTCONN, tr_strerror(ENOTCONN));
tr_error_set_from_errno(&error, ENOTCONN);
call_error_callback(*error);
tr_error_clear(&error);
}

View File

@@ -99,7 +99,7 @@ size_t tr_peer_socket::try_write(Buffer& buf, size_t max, tr_error** error) cons
if (n_written < 0 && error_code != 0)
{
tr_error_set(error, error_code, tr_strerror(error_code));
tr_error_set_from_errno(error, error_code);
}
}
#endif

View File

@@ -17,7 +17,7 @@
#include "error.h"
#include "net.h" // tr_socket_t
#include "utils-ev.h"
#include "utils.h"
#include "utils.h" // for tr_htonll(), tr_ntohll()
namespace libtransmission
{
@@ -282,7 +282,7 @@ public:
if (res == 0)
{
tr_error_set(error, ENOTCONN, tr_strerror(ENOTCONN));
tr_error_set_from_errno(error, ENOTCONN);
}
else
{