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

Reply via email to