libxbps::xbps_humanize_number(): use common values and hide implementation details from API.

So now its prototype is the following:

int xbps_humanize_number(char *buf, int64_t bytes)

It is a wrapper around NetBSD's humanize_number(3) which uses 6 digits for max
length, HN_AUTOSCALE and HN_NOSPACE|HN_DECIMAL. All users have been updated.
This commit is contained in:
Juan RP 2011-01-18 23:10:07 +01:00
parent e2b55c90be
commit 992e8c6a14
5 changed files with 42 additions and 42 deletions

View File

@ -195,7 +195,7 @@ show_transaction_sizes(struct transaction *trans)
prop_object_t obj;
uint64_t dlsize = 0, instsize = 0;
const char *tract;
char size[64];
char size[8];
bool trans_inst, trans_up, trans_conf;
trans_inst = trans_up = trans_conf = false;
@ -240,15 +240,13 @@ show_transaction_sizes(struct transaction *trans)
prop_dictionary_get_uint64(trans->dict, "total-download-size", &dlsize);
prop_dictionary_get_uint64(trans->dict, "total-installed-size",
&instsize);
if (xbps_humanize_number(size, 5, (int64_t)dlsize,
"", HN_AUTOSCALE, HN_B|HN_DECIMAL|HN_NOSPACE) == -1) {
if (xbps_humanize_number(size, (int64_t)dlsize) == -1) {
fprintf(stderr, "xbps-bin: error: humanize_number returns "
"%s\n", strerror(errno));
return -1;
}
printf("Total download size: %sB\n", size);
if (xbps_humanize_number(size, 5, (int64_t)instsize,
"", HN_AUTOSCALE, HN_B|HN_DECIMAL|HN_NOSPACE) == -1) {
if (xbps_humanize_number(size, (int64_t)instsize) == -1) {
fprintf(stderr, "xbps-bin: error: humanize_number2 returns "
"%s\n", strerror(errno));
return -1;

View File

@ -39,17 +39,16 @@ void
show_pkg_info_only_repo(prop_dictionary_t dict)
{
prop_object_t obj;
char size[64];
int rv = 0;
char size[8];
int rv;
obj = prop_dictionary_get(dict, "filename");
if (prop_object_type(obj) == PROP_TYPE_STRING) {
printf("Filename: %s", prop_string_cstring_nocopy(obj));
obj = prop_dictionary_get(dict, "filename-size");
if (prop_object_type(obj) == PROP_TYPE_NUMBER) {
rv = xbps_humanize_number(size, 5,
(int64_t)prop_number_unsigned_integer_value(obj),
"", HN_AUTOSCALE, HN_B|HN_DECIMAL|HN_NOSPACE);
rv = xbps_humanize_number(size,
(int64_t)prop_number_unsigned_integer_value(obj));
if (rv == -1)
printf(" (size: %ju)\n",
prop_number_unsigned_integer_value(obj));
@ -69,8 +68,7 @@ show_pkg_info(prop_dictionary_t dict)
{
prop_object_t obj;
const char *sep;
char size[64];
int rv = 0;
char size[8];
assert(dict != NULL);
assert(prop_dictionary_count(dict) != 0);
@ -87,10 +85,8 @@ show_pkg_info(prop_dictionary_t dict)
obj = prop_dictionary_get(dict, "installed_size");
if (prop_object_type(obj) == PROP_TYPE_NUMBER) {
printf("Installed size: ");
rv = xbps_humanize_number(size, 5,
(int64_t)prop_number_unsigned_integer_value(obj),
"", HN_AUTOSCALE, HN_B|HN_DECIMAL|HN_NOSPACE);
if (rv == -1)
if (xbps_humanize_number(size,
(int64_t)prop_number_unsigned_integer_value(obj)) == -1)
printf("%ju\n",
prop_number_unsigned_integer_value(obj));
else

View File

@ -217,15 +217,7 @@ const char *xbps_fetch_error_string(void);
/*@}*/
/* From lib/humanize_number.c */
#define HN_DECIMAL 0x01
#define HN_NOSPACE 0x02
#define HN_B 0x04
#define HN_DIVISOR_1000 0x08
#define HN_GETSCALE 0x10
#define HN_AUTOSCALE 0x20
int xbps_humanize_number(char *, size_t, int64_t, const char *, int, int);
int xbps_humanize_number(char *, int64_t);
/**
* @ingroup dircreate

View File

@ -106,7 +106,7 @@ static const char *
stat_bps(struct xferstat *xsp)
{
static char str[16];
char size[32];
char size[8];
double delta, bps;
delta = (xsp->last.tv_sec + (xsp->last.tv_usec / 1.e6))
@ -115,9 +115,8 @@ stat_bps(struct xferstat *xsp)
snprintf(str, sizeof str, "-- stalled --");
} else {
bps = ((double)(xsp->rcvd - xsp->offset) / delta);
(void)xbps_humanize_number(size, 6, (int64_t)bps, "",
HN_AUTOSCALE, HN_NOSPACE|HN_DECIMAL);
snprintf(str, sizeof str, "%sB/s", size);
(void)xbps_humanize_number(size, (int64_t)bps);
snprintf(str, sizeof str, "%s/s", size);
}
return str;
}
@ -129,18 +128,16 @@ static void
stat_display(struct xferstat *xsp)
{
struct timeval now;
char totsize[32], recvsize[32];
char totsize[8], recvsize[8];
gettimeofday(&now, NULL);
if (now.tv_sec <= xsp->last.tv_sec)
return;
xsp->last = now;
(void)xbps_humanize_number(totsize, 7, (int64_t)xsp->size, "",
HN_AUTOSCALE, HN_NOSPACE|HN_DECIMAL);
(void)xbps_humanize_number(recvsize, 7, (int64_t)xsp->rcvd, "",
HN_AUTOSCALE, HN_NOSPACE|HN_DECIMAL);
fprintf(stderr, "\r%s: %sB [%d%% of %sB]",
(void)xbps_humanize_number(totsize, (int64_t)xsp->size);
(void)xbps_humanize_number(recvsize, (int64_t)xsp->rcvd);
fprintf(stderr, "\r%s: %s [%d%% of %s]",
xsp->name, recvsize,
(int)((double)(100.0 * (double)xsp->rcvd) / (double)xsp->size),
totsize);
@ -181,11 +178,10 @@ stat_update(struct xferstat *xsp, off_t rcvd)
static void
stat_end(struct xferstat *xsp)
{
char size[32];
char size[8];
(void)xbps_humanize_number(size, 6, (int64_t)xsp->size, "",
HN_AUTOSCALE, HN_NOSPACE|HN_DECIMAL);
fprintf(stderr, "\rDownloaded %sB for %s [avg rate: %s]",
(void)xbps_humanize_number(size, (int64_t)xsp->size);
fprintf(stderr, "\rDownloaded %s for %s [avg rate: %s]",
size, xsp->name, stat_bps(xsp));
fprintf(stderr, "\033[K\n");
}

View File

@ -39,9 +39,16 @@
#include <xbps_api.h>
int
xbps_humanize_number(char *buf, size_t len, int64_t bytes,
const char *suffix, int scale, int flags)
#define HN_DECIMAL 0x01
#define HN_NOSPACE 0x02
#define HN_B 0x04
#define HN_DIVISOR_1000 0x08
#define HN_GETSCALE 0x10
#define HN_AUTOSCALE 0x20
static int
humanize_number(char *buf, size_t len, int64_t bytes,
const char *suffix, int scale, int flags)
{
const char *prefixes, *sep;
int b, i, r, maxscale, s1, s2, sign;
@ -141,3 +148,14 @@ xbps_humanize_number(char *buf, size_t len, int64_t bytes,
return (r);
}
/*
* Small wrapper for NetBSD's humanize_number(3) with some
* defaults set that we care about.
*/
int
xbps_humanize_number(char *buf, int64_t bytes)
{
return humanize_number(buf, 6, bytes, "B",
HN_AUTOSCALE, HN_DECIMAL|HN_NOSPACE);
}