import torrus 1.0.9
[freeside.git] / FS / FS / UI / bytecount.pm
index c2352da..7e78bf5 100644 (file)
@@ -1,9 +1,14 @@
 package FS::UI::bytecount;
 
 use strict;
-use vars qw($DEBUG $me);
+use vars qw($DEBUG $me @ISA @EXPORT_OK);
+use Exporter;
 use FS::Conf;
-use Number::Format;
+use Number::Format 1.50;
+
+@ISA = qw( Exporter );
+
+@EXPORT_OK = qw( bytecount_unexact parse_bytecount display_bytecount );
 
 $DEBUG = 0;
 $me = '[FS::UID::bytecount]';
@@ -31,31 +36,32 @@ sub bytecount_unexact {
   my $bc = shift;
   return("$bc bytes")
     if ($bc < 1000);
-  return(sprintf("%.2f Kbytes", $bc/1000))
-    if ($bc < 1000000);
-  return(sprintf("%.2f Mbytes", $bc/1000000))
-    if ($bc < 1000000000);
-  return(sprintf("%.2f Gbytes", $bc/1000000000));
+  return(sprintf("%.2f Kbytes", $bc/1024))
+    if ($bc < 1048576);
+  return(sprintf("%.2f Mbytes", $bc/1048576))
+    if ($bc < 1073741824);
+  return(sprintf("%.2f Gbytes", $bc/1073741824));
 }
 
 =item parse_bytecount AMOUNT
 
 Accepts a number (digits and a decimal point) possibly followed by k, m, g, or
 t (and an optional 'b') in either case.  Returns a pure number representing
-the input or the input itself if unparsable.
+the input or the input itself if unparsable.  Discards commas as noise.
 
 =cut
 
 sub parse_bytecount {
   my $bc = shift;
   return $bc if (($bc =~ tr/.//) > 1);
-  $bc =~ /^\s*([\d.]*)\s*([kKmMgGtT]?)[bB]?\s*$/ or return $bc;
+  $bc =~ /^\s*([,\d.]*)\s*([kKmMgGtT]?)[bB]?\s*$/ or return $bc;
   my $base = $1;
+  $base =~ tr/,//d;
   return $bc unless length $base;
   my $exponent = index ' kmgt', lc($2);
   return $bc if ($exponent < 0 && $2);
   $exponent = 0 if ($exponent < 0);
-  return $base * 1024 ** $exponent;
+  return int($base * 1024 ** $exponent);  #bytecounts are integer values
 }
 
 =item display_bytecount AMOUNT