From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=38778 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P5zzH-0008RT-WB for qemu-devel@nongnu.org; Wed, 13 Oct 2010 07:59:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P5xd7-0005Qa-2g for qemu-devel@nongnu.org; Wed, 13 Oct 2010 05:28:13 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58200) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P5xd6-0005QU-Rh for qemu-devel@nongnu.org; Wed, 13 Oct 2010 05:28:13 -0400 Message-ID: <4CB57BCA.4030006@redhat.com> Date: Wed, 13 Oct 2010 11:28:42 +0200 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v2 2/7] cutils: Add bytes_to_str() to format byte values References: <1286552914-27014-1-git-send-email-stefanha@linux.vnet.ibm.com> <1286552914-27014-3-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: Anthony Liguori , Avi Kivity , Christoph Hellwig , Stefan Hajnoczi , qemu-devel@nongnu.org Am 13.10.2010 11:15, schrieb Markus Armbruster: > Stefan Hajnoczi writes: > >> From: Anthony Liguori >> >> This common function converts byte counts to human-readable strings with >> proper units. >> >> Signed-off-by: Anthony Liguori >> Signed-off-by: Stefan Hajnoczi >> --- >> cutils.c | 15 +++++++++++++++ >> qemu-common.h | 1 + >> 2 files changed, 16 insertions(+), 0 deletions(-) >> >> diff --git a/cutils.c b/cutils.c >> index 6c32198..5041203 100644 >> --- a/cutils.c >> +++ b/cutils.c >> @@ -301,3 +301,18 @@ int get_bits_from_size(size_t size) >> return __builtin_ctzl(size); >> #endif >> } >> + >> +void bytes_to_str(char *buffer, size_t buffer_len, uint64_t size) > > Why is the size argument uint64_t and not size_t? size_t would be rather small for disk images on 32 bit hosts. > The name bytes_to_str() suggests you're formatting a sequence of bytes. > What about sztostr()? Matches Jes's strtosz(). > >> +{ >> + if (size < (1ULL << 10)) { >> + snprintf(buffer, buffer_len, "%" PRIu64 " byte(s)", size); >> + } else if (size < (1ULL << 20)) { >> + snprintf(buffer, buffer_len, "%" PRIu64 " KB(s)", size >> 10); >> + } else if (size < (1ULL << 30)) { >> + snprintf(buffer, buffer_len, "%" PRIu64 " MB(s)", size >> 20); >> + } else if (size < (1ULL << 40)) { >> + snprintf(buffer, buffer_len, "%" PRIu64 " GB(s)", size >> 30); >> + } else { >> + snprintf(buffer, buffer_len, "%" PRIu64 " TB(s)", size >> 40); >> + } > > Sure you want to truncate rather than round? > > The "(s)" sure are ugly. We don't usually add plural-s after a unit: we > write ten milliseconds as 10ms, not 10ms(s). I suggest taking the output format from cvtstr in cmd.c, so that qemu-io output stays the same when switching to a common function (it says "10 KiB" and "1 bytes"). Kevin