? format_size.patch
Index: common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.768
diff -u -p -r1.768 common.inc
--- common.inc	16 May 2008 01:23:31 -0000	1.768
+++ common.inc	26 May 2008 15:28:53 -0000
@@ -1083,13 +1083,17 @@ function format_size($size, $langcode = 
     return format_plural($size, '1 byte', '@count bytes', array(), $langcode);
   }
   else {
-    $size = round($size / 1024, 2);
-    $suffix = t('KB', array(), $langcode);
-    if ($size >= 1024) {
-      $size = round($size / 1024, 2);
-      $suffix = t('MB', array(), $langcode);
+    $size = $size / 1024; // convert bytes to kibibytes (1024 bytes)
+    $units = array('KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB');
+    foreach ($units as $suffix) {
+      if ($size >= 1024) {
+        $size = $size / 1024;
+      }
+      else {
+        break;
+      }
     }
-    return t('@size @suffix', array('@size' => $size, '@suffix' => $suffix), $langcode);
+    return t('@size @suffix', array('@size' => round($size, 2), '@suffix' => $suffix), $langcode);
   }
 }
 
