From 5e6b0ef825bb7655c16048a34e5ec5fb1b6de6c2 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Wed, 7 Apr 2021 00:06:32 -0700 Subject: [PATCH] Add optional/better format to file_size_str() by passing a precision as 3rd arg Returns a floating-point formatted size estimate more in-line with my preference (e.g. 17.0G instead of 17,000M). --- exec/load/file_size.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/exec/load/file_size.js b/exec/load/file_size.js index 2d2a918257..d0c0da3d8e 100644 --- a/exec/load/file_size.js +++ b/exec/load/file_size.js @@ -4,8 +4,10 @@ // Function for returning a string representation of a file size -function file_size_str(size, bytes) +function file_size_str(size, bytes, float) { + if(float !== undefined) + return file_size_float(size, /* unit: */bytes, /* precision */float); if(bytes) { if(size < 1000) /* Bytes */ return format("%ldB",size); @@ -56,3 +58,24 @@ function file_size_str(size, bytes) return "Too damn big to download."; } + +// ported from xpdev/genwrap.c byte_estimate_to_str() +function file_size_float(bytes, unit, precision) +{ + const one_tebibyte = 1024.0*1024.0*1024.0*1024.0; + const one_gibibyte = 1024.0*1024.0*1024.0; + const one_mebibyte = 1024.0*1024.0; + const one_kibibyte = 1024.0; + + if(bytes >= one_tebibyte) + return format("%1.*fT", precision, bytes/one_tebibyte); + if(bytes >= one_gibibyte || unit == one_gibibyte) + return format("%1.*fG", precision, bytes/one_gibibyte); + if(bytes >= one_mebibyte || unit == one_mebibyte) + return format("%1.*fM", precision, bytes/one_mebibyte); + else if(bytes >= one_kibibyte || unit == one_kibibyte) + return format("%1.*fK", precision, bytes/one_kibibyte); + else + return format("%luB", bytes); + +} -- GitLab