-
- if (size < 1024)
- g_snprintf(str, sizeof(str), _("%dB"), (gint)size);
- else if (size >> 10 < 1024)
- g_snprintf(str, sizeof(str), _("%.1fKB"), (gfloat)size / (1 << 10));
- else if (size >> 20 < 1024)
- g_snprintf(str, sizeof(str), _("%.2fMB"), (gfloat)size / (1 << 20));
- else
- g_snprintf(str, sizeof(str), _("%.2fGB"), (gfloat)size / (1 << 30));
-
- return str;
+ static gchar *b_format = NULL, *kb_format = NULL,
+ *mb_format = NULL, *gb_format = NULL;
+ register int t = 0, r = 0;
+ if (b_format == NULL) {
+ b_format = _("%dB");
+ kb_format = _("%d.%dKB");
+ mb_format = _("%.2fMB");
+ gb_format = _("%.2fGB");
+ }
+
+ if (size < 1024) {
+ g_snprintf(str, sizeof(str), b_format, (gint)size);
+ return str;
+ } else if (size >> 10 < 1024) {
+ divide(size, (1 << 10), t, r);
+ g_snprintf(str, sizeof(str), kb_format, t, r);
+ return str;
+ } else if (size >> 20 < 1024) {
+ g_snprintf(str, sizeof(str), mb_format, (gfloat)size / (1 << 20));
+ return str;
+ } else {
+ g_snprintf(str, sizeof(str), gb_format, (gfloat)size / (1 << 30));
+ return str;
+ }