/* Writes formatted output to the console.
In the kernel, the console is both the video display and first
serial port.
- In userspace, the console is file descriptor 1.
-*/
+ In userspace, the console is file descriptor 1. */
int
printf (const char *format, ...)
{
auxiliary data AUX. The integer converted has absolute value
VALUE. If IS_SIGNED is true, does a signed conversion with
NEGATIVE indicating a negative value; otherwise does an
- unsigned conversion and ignores IS_SIGNED. The output is done
+ unsigned conversion and ignores NEGATIVE. The output is done
according to the provided base B. Details of the conversion
are in C. */
static void
/* Append enough zeros to match precision.
If requested precision is 0, then a value of zero is
rendered as a null string, otherwise as "0".
- If the # flag is used with base 0, the result must always
+ If the # flag is used with base 8, the result must always
begin with a zero. */
precision = c->precision < 0 ? 1 : c->precision;
while (cp - buf < precision && cp < buf + sizeof buf - 1)
size -= n;
}
}
+
+/* Prints SIZE, which represents a number of bytes, in a
+ human-readable format, e.g. "256 kB". */
+void
+print_human_readable_size (uint64_t size)
+{
+ if (size == 1)
+ printf ("1 byte");
+ else
+ {
+ static const char *factors[] = {"bytes", "kB", "MB", "GB", "TB", NULL};
+ const char **fp;
+
+ for (fp = factors; size >= 1024 && fp[1] != NULL; fp++)
+ size /= 1024;
+ printf ("%"PRIu64" %s", size, *fp);
+ }
+}