strbuf_humanise: use unsigned variables
All of the numeric formatting done by this function uses "%u", but we pass in a signed "int". The actual range doesn't matter here, since the conditional makes sure we're always showing reasonably small numbers. And even gcc's format-checker does not seem to mind. But it's potentially confusing to a reader of the code to see the mismatch. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
765b496dc6
commit
7726d360b5
10
strbuf.c
10
strbuf.c
@ -734,18 +734,18 @@ void strbuf_humanise_bytes(struct strbuf *buf, off_t bytes)
|
|||||||
{
|
{
|
||||||
if (bytes > 1 << 30) {
|
if (bytes > 1 << 30) {
|
||||||
strbuf_addf(buf, "%u.%2.2u GiB",
|
strbuf_addf(buf, "%u.%2.2u GiB",
|
||||||
(int)(bytes >> 30),
|
(unsigned)(bytes >> 30),
|
||||||
(int)(bytes & ((1 << 30) - 1)) / 10737419);
|
(unsigned)(bytes & ((1 << 30) - 1)) / 10737419);
|
||||||
} else if (bytes > 1 << 20) {
|
} else if (bytes > 1 << 20) {
|
||||||
int x = bytes + 5243; /* for rounding */
|
unsigned x = bytes + 5243; /* for rounding */
|
||||||
strbuf_addf(buf, "%u.%2.2u MiB",
|
strbuf_addf(buf, "%u.%2.2u MiB",
|
||||||
x >> 20, ((x & ((1 << 20) - 1)) * 100) >> 20);
|
x >> 20, ((x & ((1 << 20) - 1)) * 100) >> 20);
|
||||||
} else if (bytes > 1 << 10) {
|
} else if (bytes > 1 << 10) {
|
||||||
int x = bytes + 5; /* for rounding */
|
unsigned x = bytes + 5; /* for rounding */
|
||||||
strbuf_addf(buf, "%u.%2.2u KiB",
|
strbuf_addf(buf, "%u.%2.2u KiB",
|
||||||
x >> 10, ((x & ((1 << 10) - 1)) * 100) >> 10);
|
x >> 10, ((x & ((1 << 10) - 1)) * 100) >> 10);
|
||||||
} else {
|
} else {
|
||||||
strbuf_addf(buf, "%u bytes", (int)bytes);
|
strbuf_addf(buf, "%u bytes", (unsigned)bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user