diff --git a/include/humanize_number.h b/include/humanize_number.h new file mode 100644 index 0000000000..b784da1ad3 --- /dev/null +++ b/include/humanize_number.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 1997, 1998, 1999, 2002 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, + * NASA Ames Research Center, by Luke Mewburn and by Tomas Svensson. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _HUMANIZE_NUMBER_H_ +#define _HUMANIZE_NUMBER_H_ + +#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 humanize_number(char *, size_t, int64_t, const char *, int, int); + +#endif diff --git a/include/xbps_api.h b/include/xbps_api.h index be3b1cd28d..4a83d20c7f 100644 --- a/include/xbps_api.h +++ b/include/xbps_api.h @@ -48,4 +48,7 @@ /* SHA256 implementation */ #include "sha256.h" +/* NetBSD humanize_number() */ +#include "humanize_number.h" + #endif /* !_XBPS_API_H_ */ diff --git a/lib/humanize_number.c b/lib/humanize_number.c index 87dde9d1ff..5068cc7a68 100644 --- a/lib/humanize_number.c +++ b/lib/humanize_number.c @@ -37,12 +37,7 @@ #include #include -#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 +#include int humanize_number(char *buf, size_t len, int64_t bytes, diff --git a/lib/plist.c b/lib/plist.c index 7fe588f5a3..436b578459 100644 --- a/lib/plist.c +++ b/lib/plist.c @@ -373,6 +373,7 @@ xbps_show_pkg_info(prop_dictionary_t dict) { prop_object_t obj; const char *sep = NULL; + char size[64]; assert(dict != NULL); if (prop_dictionary_count(dict) == 0) @@ -383,9 +384,12 @@ xbps_show_pkg_info(prop_dictionary_t dict) printf("Package: %s\n", prop_string_cstring_nocopy(obj)); obj = prop_dictionary_get(dict, "installed_size"); - if (obj && prop_object_type(obj) == PROP_TYPE_NUMBER) - printf("Installed size: %zu bytes\n", - prop_number_unsigned_integer_value(obj)); + if (obj && prop_object_type(obj) == PROP_TYPE_NUMBER) { + humanize_number(size, 5, + (int64_t)prop_number_unsigned_integer_value(obj), + "", HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL); + printf("Installed size: %s\n", size); + } obj = prop_dictionary_get(dict, "maintainer"); if (obj && prop_object_type(obj) == PROP_TYPE_STRING)