From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id 499F43858D32; Sun, 29 Jan 2023 16:52:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 499F43858D32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1675011172; bh=O0scJm4r76LOtFOfgaRTodXbJdggafknlcw6E2L5Z38=; h=From:To:Subject:Date:From; b=dfUY6h+ogDDl1ElMA3GcAD3dZ94ffmsUugsp7VyMtNTWNcT3BlbWLRjwWPa2cimvc dv9ik7HQsiKhWDkJ6n1p0SGG31NEPuMcMDi/X4vsr7izuvO1YTvHVebe9vOb7Il2Wx y0tlZL9MG5td1MgjgoHYeLIuhkWgcFrj//hEbtHw= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin/main] Cygwin: cygcheck: add human readable package size output X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/main X-Git-Oldrev: 022665af17d68c8e8bfe60258c69d5dc1c4f625d X-Git-Newrev: c67e6570eef5b745e23d8c9449062b0f9f6c8cc4 Message-Id: <20230129165252.499F43858D32@sourceware.org> Date: Sun, 29 Jan 2023 16:52:52 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3Dc67e6570eef= 5b745e23d8c9449062b0f9f6c8cc4 commit c67e6570eef5b745e23d8c9449062b0f9f6c8cc4 Author: Corinna Vinschen AuthorDate: Sun Jan 29 17:21:28 2023 +0100 Commit: Corinna Vinschen CommitDate: Sun Jan 29 17:21:28 2023 +0100 Cygwin: cygcheck: add human readable package size output =20 Signed-off-by: Corinna Vinschen Diff: --- winsup/utils/mingw/cygcheck.cc | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/winsup/utils/mingw/cygcheck.cc b/winsup/utils/mingw/cygcheck.cc index ed1d8f85a2d2..17a7669197df 100644 --- a/winsup/utils/mingw/cygcheck.cc +++ b/winsup/utils/mingw/cygcheck.cc @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -2343,6 +2344,27 @@ error: return NULL; } =20 +static const char * +human_readable (char *buf, size_t bytes) +{ + const char *siz[] =3D { "B", "K", "M", "G", NULL }; + double db =3D bytes; + int idx =3D 0; + int prec; + + while (bytes > 1023 && siz[idx + 1]) + { + bytes >>=3D 10; + db /=3D 1024.0; + ++idx; + } + prec =3D log10 (db) + 1; + if (prec < 2) + prec =3D 2; + sprintf (buf, "%.*g %s", prec, db, siz[idx]); + return buf; +} + static void package_info_print (ini_package_info *pi, vers_info *vers) { @@ -2364,7 +2386,9 @@ package_info_print (ini_package_info *pi, vers_info *= vers) if (vers->install) { char *arch =3D strcpy (buf, vers->install); - char *size =3D NULL; + char *sizep; + size_t size =3D 0; + char *cp; =20 cp =3D strchr (arch, '/'); @@ -2374,10 +2398,13 @@ package_info_print (ini_package_info *pi, vers_info= *vers) cp =3D strchr (cp, ' '); if (cp) { - size =3D ++cp; + sizep =3D ++cp; cp =3D strchr (cp, ' '); if (cp) - *cp =3D '\0'; + { + *cp =3D '\0'; + size =3D strtoull (sizep, NULL, 10); + } } } if (cp) @@ -2385,7 +2412,9 @@ package_info_print (ini_package_info *pi, vers_info *= vers) printf ("Architecture: %s\n", arch); if (vers->install_date) printf ("Install Date: %s", ctime (&vers->install_date)); - printf ("Size : %s\n", size); /* FIXME: human-readable */ + + printf ("Size : %llu (%s)\n", size, + human_readable (buf, size)); } } if (vers->source)