mirror of
https://github.com/transmission/transmission.git
synced 2025-12-24 04:18:39 +00:00
refactor: add tr_error_set_from_errno() (#4662)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 {};
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user