transmission-remote: Fix size display for torrents > 4GB (#2029)

* As size_t is not 64-bit on all platforms, explicitly use uin64_t when dealing with byte sizes to support torrents > 4GB
This commit is contained in:
Frank Aurich
2021-10-26 23:06:47 +02:00
committed by GitHub
parent c369f23686
commit d9277d4b93
2 changed files with 15 additions and 9 deletions

View File

@@ -1579,7 +1579,7 @@ uint64_t tr_ntohll(uint64_t x)
struct formatter_unit struct formatter_unit
{ {
char* name; char* name;
size_t value; uint64_t value;
}; };
using formatter_units = std::array<formatter_unit, 4>; using formatter_units = std::array<formatter_unit, 4>;
@@ -1598,9 +1598,15 @@ enum
TR_FMT_TB TR_FMT_TB
}; };
static void formatter_init(formatter_units& units, size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb) static void formatter_init(
formatter_units& units,
uint64_t kilo,
char const* kb,
char const* mb,
char const* gb,
char const* tb)
{ {
size_t value = kilo; uint64_t value = kilo;
units[TR_FMT_KB].name = tr_strdup(kb); units[TR_FMT_KB].name = tr_strdup(kb);
units[TR_FMT_KB].value = value; units[TR_FMT_KB].value = value;
@@ -1617,7 +1623,7 @@ static void formatter_init(formatter_units& units, size_t kilo, char const* kb,
units[TR_FMT_TB].value = value; units[TR_FMT_TB].value = value;
} }
static char* formatter_get_size_str(formatter_units const& u, char* buf, size_t bytes, size_t buflen) static char* formatter_get_size_str(formatter_units const& u, char* buf, uint64_t bytes, size_t buflen)
{ {
formatter_unit const* unit = nullptr; formatter_unit const* unit = nullptr;
@@ -1661,12 +1667,12 @@ static char* formatter_get_size_str(formatter_units const& u, char* buf, size_t
static formatter_units size_units; static formatter_units size_units;
void tr_formatter_size_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb) void tr_formatter_size_init(uint64_t kilo, char const* kb, char const* mb, char const* gb, char const* tb)
{ {
formatter_init(size_units, kilo, kb, mb, gb, tb); formatter_init(size_units, kilo, kb, mb, gb, tb);
} }
char* tr_formatter_size_B(char* buf, size_t bytes, size_t buflen) char* tr_formatter_size_B(char* buf, uint64_t bytes, size_t buflen)
{ {
return formatter_get_size_str(size_units, buf, bytes, buflen); return formatter_get_size_str(size_units, buf, bytes, buflen);
} }

View File

@@ -372,7 +372,7 @@ uint64_t tr_ntohll(uint64_t);
/* example: tr_formatter_size_init(1024, _("KiB"), _("MiB"), _("GiB"), _("TiB")); */ /* example: tr_formatter_size_init(1024, _("KiB"), _("MiB"), _("GiB"), _("TiB")); */
void tr_formatter_size_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb); void tr_formatter_size_init(uint64_t kilo, char const* kb, char const* mb, char const* gb, char const* tb);
void tr_formatter_speed_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb); void tr_formatter_speed_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb);
@@ -380,7 +380,7 @@ void tr_formatter_mem_init(size_t kilo, char const* kb, char const* mb, char con
extern size_t tr_speed_K; extern size_t tr_speed_K;
extern size_t tr_mem_K; extern size_t tr_mem_K;
extern size_t tr_size_K; extern uint64_t tr_size_K; /* unused? */
/* format a speed from KBps into a user-readable string. */ /* format a speed from KBps into a user-readable string. */
char* tr_formatter_speed_KBps(char* buf, double KBps, size_t buflen); char* tr_formatter_speed_KBps(char* buf, double KBps, size_t buflen);
@@ -395,7 +395,7 @@ static inline char* tr_formatter_mem_MB(char* buf, double MBps, size_t buflen)
} }
/* format a file size from bytes into a user-readable string. */ /* format a file size from bytes into a user-readable string. */
char* tr_formatter_size_B(char* buf, size_t bytes, size_t buflen); char* tr_formatter_size_B(char* buf, uint64_t bytes, size_t buflen);
void tr_formatter_get_units(void* dict); void tr_formatter_get_units(void* dict);