|
@@ -39,27 +39,35 @@ int display_options (void)
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * print sizes as "xxx kB", "xxx.y kB", "xxx MB" or "xxx.y MB" as needed;
|
|
|
|
- * allow for optional trailing string (like "\n")
|
|
|
|
|
|
+ * print sizes as "xxx kB", "xxx.y kB", "xxx MB", "xxx.y MB",
|
|
|
|
+ * xxx GB, or xxx.y GB as needed; allow for optional trailing string
|
|
|
|
+ * (like "\n")
|
|
*/
|
|
*/
|
|
void print_size (phys_size_t size, const char *s)
|
|
void print_size (phys_size_t size, const char *s)
|
|
{
|
|
{
|
|
- ulong m, n;
|
|
|
|
- ulong d = 1 << 20; /* 1 MB */
|
|
|
|
- char c = 'M';
|
|
|
|
-
|
|
|
|
- if (size < d) { /* print in kB */
|
|
|
|
- c = 'k';
|
|
|
|
- d = 1 << 10;
|
|
|
|
|
|
+ ulong m = 0, n;
|
|
|
|
+ phys_size_t d = 1 << 30; /* 1 GB */
|
|
|
|
+ char c = 'G';
|
|
|
|
+
|
|
|
|
+ if (size < d) { /* try MB */
|
|
|
|
+ c = 'M';
|
|
|
|
+ d = 1 << 20;
|
|
|
|
+ if (size < d) { /* print in kB */
|
|
|
|
+ c = 'k';
|
|
|
|
+ d = 1 << 10;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
n = size / d;
|
|
n = size / d;
|
|
|
|
|
|
- m = (10 * (size - (n * d)) + (d / 2) ) / d;
|
|
|
|
|
|
+ /* If there's a remainder, deal with it */
|
|
|
|
+ if(size % d) {
|
|
|
|
+ m = (10 * (size - (n * d)) + (d / 2) ) / d;
|
|
|
|
|
|
- if (m >= 10) {
|
|
|
|
- m -= 10;
|
|
|
|
- n += 1;
|
|
|
|
|
|
+ if (m >= 10) {
|
|
|
|
+ m -= 10;
|
|
|
|
+ n += 1;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
printf ("%2ld", n);
|
|
printf ("%2ld", n);
|