mirror of
https://github.com/transmission/transmission.git
synced 2025-12-20 02:18:42 +00:00
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user