Hello!

This patch should remove all dependency of floating point support in
GRUB.  The patch makes sure that all rounding is done to the nearest
integer.

include/grub/powerpc/libgcc.h will be cleaned up separately.

-- 
Regards,
Pavel Roskin
diff --git a/commands/ls.c b/commands/ls.c
index 77af426..4257e02 100644
--- a/commands/ls.c
+++ b/commands/ls.c
@@ -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
diff --git a/kern/misc.c b/kern/misc.c
index 444ce2e..c662c96 100644
--- a/kern/misc.c
+++ b/kern/misc.c
@@ -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);
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to