Hi, Does this patch look okay? Or do I need to give any more information?
By the way, this is my first patch submission to GNU :) Thanks Deepak On Mon, Aug 18, 2008 at 10:52 AM, Deepak Vankadaru < [EMAIL PROTECTED]> wrote: > Attached the same in unified diff format. > > This is listed in known bugs (http://grub.enbug.org/KnownBugs) > > > On Sun, Aug 17, 2008 at 11:28 PM, Deepak Vankadaru < > [EMAIL PROTECTED]> wrote: > >> Hi >> >> I have implemented precision formatting support in grub_printf. Following >> is the diff (of kern/misc.c) >> >> Thanks >> Deepak >> >> ###############start of diff >> *** kern/misc.c 2008-08-18 04:46:36.000000000 +0530 >> --- /home/deepakv/orig/grub2-1.96+20080724/kern/misc.c 2008-06-16 >> 06:12:48.000000000 +0530 >> *************** >> *** 565,572 **** >> *p++ = (d > 9) ? d + 'a' - 10 : d + '0'; >> } >> while (n /= base); >> - if ( p == str) >> - *p++ = '0'; >> *p = 0; >> >> grub_reverse (str); >> --- 565,570 ---- >> *************** >> *** 682,693 **** >> write_char (*s++); >> } >> >> - void write_str_limit (const char *s, int count) >> - { >> - while (*s && count--) >> - write_char (*s++); >> - } >> - >> void write_fill (const char ch, int n) >> { >> int i; >> --- 680,685 ---- >> *************** >> *** 704,711 **** >> char tmp[32]; >> char *p; >> unsigned int format1 = 0; >> ! unsigned int format2 = 1; >> ! grub_bool_t format2_default = TRUE; >> char zerofill = ' '; >> int rightfill = 0; >> int n; >> --- 696,702 ---- >> char tmp[32]; >> char *p; >> unsigned int format1 = 0; >> ! unsigned int format2 = 3; >> char zerofill = ' '; >> int rightfill = 0; >> int n; >> *************** >> *** 723,737 **** >> while (*p && grub_isdigit (*p)) >> p++; >> >> ! if (p > fmt || *p == '.') >> { >> char s[p - fmt + 1]; >> grub_strncpy (s, fmt, p - fmt); >> s[p - fmt] = 0; >> if (s[0] == '0') >> zerofill = '0'; >> ! if (p - fmt) >> ! format1 = grub_strtoul (s, 0, 10); >> fmt = p; >> if (*p && *p == '.') >> { >> --- 714,727 ---- >> while (*p && grub_isdigit (*p)) >> p++; >> >> ! if (p > fmt) >> { >> char s[p - fmt + 1]; >> grub_strncpy (s, fmt, p - fmt); >> s[p - fmt] = 0; >> if (s[0] == '0') >> zerofill = '0'; >> ! format1 = grub_strtoul (s, 0, 10); >> fmt = p; >> if (*p && *p == '.') >> { >> *************** >> *** 747,755 **** >> format2 = grub_strtoul (fstr, 0, 10); >> fmt = p; >> } >> - else >> - format2 = 0; >> - format2_default = FALSE; >> } >> } >> >> --- 737,742 ---- >> *************** >> *** 790,806 **** >> n = va_arg (args, int); >> grub_itoa (tmp, c, n); >> } >> ! if ( format2 == 0 && grub_strcmp (tmp, "0") == 0) >> ! break; >> ! if ( grub_strlen (tmp) > format2) >> ! format2 = grub_strlen (tmp); >> ! if (! rightfill && format2 < format1) >> ! write_fill (zerofill, format1 - format2); >> ! if ( grub_strlen (tmp) < format2) >> ! write_fill ('0', format2 - grub_strlen (tmp)); >> write_str (tmp); >> ! if (rightfill && format2 < format1) >> ! write_fill (zerofill, format1 - format2); >> break; >> >> case 'c': >> --- 777,787 ---- >> n = va_arg (args, int); >> grub_itoa (tmp, c, n); >> } >> ! 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': >> *************** >> *** 862,895 **** >> p = va_arg (args, char *); >> if (p) >> { >> ! if ( format2_default ) >> ! { >> ! if (!rightfill && grub_strlen (p) < format1) >> ! write_fill (' ', format1 - grub_strlen (p)); >> >> ! write_str (p); >> >> ! if (rightfill && grub_strlen (p) < format1) >> ! write_fill (' ', format1 - grub_strlen (p)); >> ! } >> ! else >> ! { >> ! if (!rightfill && format2 < format1) >> ! write_fill (' ', format1 - format2); >> ! >> ! if ( grub_strlen (p) < format2) >> ! { >> ! if ( format2 <= format1) >> ! write_fill (' ', format2 - grub_strlen (p)); >> ! else >> ! write_fill (' ', format1 - grub_strlen (p)); >> ! } >> ! >> ! write_str_limit (p, format2); >> ! >> ! if (rightfill && format2 < format1) >> ! write_fill (' ', format1 - format2); >> ! } >> } >> else >> write_str ("(null)"); >> --- 843,855 ---- >> p = va_arg (args, char *); >> if (p) >> { >> ! if (!rightfill && grub_strlen (p) < format1) >> ! write_fill (zerofill, format1 - grub_strlen (p)); >> >> ! write_str (p); >> >> ! if (rightfill && grub_strlen (p) < format1) >> ! write_fill (zerofill, format1 - grub_strlen (p)); >> } >> else >> write_str ("(null)"); >> >> ###############end of diff >> >> ######start of test case >> int main() >> { >> typedef int (*printf_ptr)(char const *str, ...); >> printf_ptr p; >> if(getenv("GRUB_PRINTF")) >> { >> printf("using grub_printf\n"); >> p = grub_printf; >> } >> else >> { >> printf("using printf\n"); >> p = printf; >> } >> p("##%4.2d##\n",1); >> p("##%4.2d##\n",12); >> p("##%4.2d##\n",123); >> p("##%4.2d##\n",1234); >> p("##%4.2d##\n",12345); >> p("##%3.3d##\n",12); >> p("##%3.3d##\n",123); >> p("##%3.3d##\n",1234); >> p("##%2.4d##\n",12345); >> p("##%2.4d##\n",1234); >> p("##%2.4d##\n",123); >> p("##%2.4d##\n",12); >> p("##%2.4d##\n",1); >> p("##%.0d##\n",0); >> p("##%.0d##\n",1); >> p("##%4.2s##\n","1"); >> p("##%4.2s##\n","12"); >> p("##%4.2s##\n","123"); >> p("##%4.2s##\n","1234"); >> p("##%4.2s##\n","12345"); >> p("##%3.3s##\n","12"); >> p("##%3.3s##\n","123"); >> p("##%3.3s##\n","1234"); >> p("##%2.4s##\n","12345"); >> p("##%2.4s##\n","1234"); >> p("##%2.4s##\n","123"); >> p("##%2.4s##\n","12"); >> p("##%2.4s##\n","1"); >> return 0; >> } >> > >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel