remove all floating point operations
RFC PATCH 1/1 remove all floating point operations
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.
Signature · 2 lines
Regards, Pavel Roskin
commands/ls.c +7 -3
@@ -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
kern/misc.c +0 -31
@@ -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);