]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-06-15 Pavel Roskin <proski@gnu.org>
authorproski <proski@localhost>
Mon, 16 Jun 2008 00:42:48 +0000 (00:42 +0000)
committerproski <proski@localhost>
Mon, 16 Jun 2008 00:42:48 +0000 (00:42 +0000)
* commands/ls.c (grub_ls_list_files): Use integer calculations
for human readable format, avoid floating point use.
* kern/misc.c (grub_ftoa): Remove.
(grub_vsprintf): Remove floating point support.

ChangeLog
commands/ls.c
kern/misc.c

index b307b5668e8834db4c7f0f6ad2dbe6dc35a84a83..19ca14092846cae048fb906b898c3cfd2030905e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-06-15  Pavel Roskin  <proski@gnu.org>
+
+       * commands/ls.c (grub_ls_list_files): Use integer calculations
+       for human readable format, avoid floating point use.
+       * kern/misc.c (grub_ftoa): Remove.
+       (grub_vsprintf): Remove floating point support.
+
 2008-06-15  Robert Millan  <rmh@aybabtu.com>
 
        * util/grub.d/10_linux.in: Use the underliing device for loop-AES
index 77af426b1bcb375805ea387dcf0862bda82df567..4257e026f0a4f04ad94cea57137ef857ff8f91d4 100644 (file)
@@ -108,21 +108,25 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
            grub_printf ("%-12llu", (unsigned long long) file->size);
          else
            {
-             float fsize = file->size;
+             grub_uint64_t fsize = file->size * 100ULL;
              int fsz = file->size;
              int units = 0;
              char buf[20];
              
              while (fsz / 1024)
                {
-                 fsize /= 1024;
+                 fsize = (fsize + 512) / 1024;
                  fsz /= 1024;
                  units++;
                }
 
              if (units)
                {
-                 grub_sprintf (buf, "%0.2f%c", fsize, grub_human_sizes[units]);
+                 grub_uint32_t whole, fraction;
+
+                 whole = grub_divmod64 (fsize, 100, &fraction);
+                 grub_sprintf (buf, "%u.%02u%c", whole, fraction,
+                               grub_human_sizes[units]);
                  grub_printf ("%-12s", buf);
                }
              else
index 444ce2e5072ac208137715bdc4acc12a9aa31604..c662c963caef2b782fe2ea25e7e31f0b53a2a73c 100644 (file)
@@ -655,24 +655,6 @@ grub_lltoa (char *str, int c, unsigned long long n)
   return p;
 }
 
-static char *
-grub_ftoa (char *str, double f, int round)
-{
-  unsigned int intp;
-  unsigned int fractp;
-  unsigned int power = 1;
-  int i;
-
-  for (i = 0; i < round; i++)
-    power *= 10;
-
-  intp = f;
-  fractp = (f - (float) intp) * power;
-
-  grub_sprintf (str, "%d.%d", intp, fractp);
-  return str;
-}
-
 int
 grub_vsprintf (char *str, const char *fmt, va_list args)
 {
@@ -807,19 +789,6 @@ grub_vsprintf (char *str, const char *fmt, va_list args)
              write_char (n & 0xff);
              break;
 
-           case 'f':
-             {
-               float f;
-               f = va_arg (args, double);
-               grub_ftoa (tmp, f, format2);
-               if (!rightfill && grub_strlen (tmp) < format1)
-                 write_fill (zerofill, format1 - grub_strlen (tmp));
-               write_str (tmp);
-               if (rightfill && grub_strlen (tmp) < format1)
-                 write_fill (zerofill, format1 - grub_strlen (tmp));
-               break;
-             }
-             
            case 'C':
              {
                grub_uint32_t code = va_arg (args, grub_uint32_t);