diff --git a/bin/xbps-bin/install.c b/bin/xbps-bin/install.c index 3e051ebe..5094e04d 100644 --- a/bin/xbps-bin/install.c +++ b/bin/xbps-bin/install.c @@ -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; diff --git a/bin/xbps-repo/util.c b/bin/xbps-repo/util.c index 68c10f72..e9c9603b 100644 --- a/bin/xbps-repo/util.c +++ b/bin/xbps-repo/util.c @@ -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 diff --git a/include/xbps_api.h b/include/xbps_api.h index 67870abc..c3c5a037 100644 --- a/include/xbps_api.h +++ b/include/xbps_api.h @@ -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 diff --git a/lib/download.c b/lib/download.c index a805959a..57312fe0 100644 --- a/lib/download.c +++ b/lib/download.c @@ -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"); } diff --git a/lib/humanize_number.c b/lib/humanize_number.c index 5e3dc19a..0689215a 100644 --- a/lib/humanize_number.c +++ b/lib/humanize_number.c @@ -39,9 +39,16 @@ #include -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); +}