grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] normal/cmdline.c : history contains empty lines


From: Marco Gerards
Subject: Re: [PATCH] normal/cmdline.c : history contains empty lines
Date: Wed, 29 Dec 2004 19:31:13 +0000
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Vincent Pelletier <address@hidden> writes:

> Hi.
> Here is my first patch to grub2 :) .

Thanks. :)

> Changelog :
>
> 2004-12-13 Vincent Pelletier <address@hidden>
> * grub_history_get : doesn't add empty lines, exits if called with NULL
> argument
> * grub_cmdline_get : command is added to history after user hit
> "return", when pressing "down" arrow when on the most recent item in
> history an empty line is shown
>
> Vincent "Subdino" Pelletier

Your patch was kinda hard to comprehend, especially because you
rewrote grub_history_add.  And unfortunately it caused a segfault
here. :/

The main problem was in the logic of the history code.  I should be
terribly ashamed for doing it wrong like this in the first place.  I
made a fix to change the logic there, instead of in grub_history_add.
In the meanwhile I made it work just like bash, like Okuji requested.

Vincent, does this patch solve your problem?  I will commit it soon.

Thanks,
Marco



2004-12-29  Marco Gerards  <address@hidden>

        * normal/cmdline.c (grub_cmdline_get): Redone logic so no empty
        lines are inserted and make it work like readline.  Reported by
        Vincent Pelletier <address@hidden>.


Index: normal/cmdline.c
===================================================================
RCS file: /cvsroot/grub/grub2/normal/cmdline.c,v
retrieving revision 1.10
diff -u -p -u -p -r1.10 cmdline.c
--- normal/cmdline.c    13 Dec 2004 17:26:17 -0000      1.10
+++ normal/cmdline.c    29 Dec 2004 19:19:03 -0000
@@ -556,7 +556,8 @@ grub_cmdline_get (const char *prompt, ch
   
   cl_insert (cmdline);
 
-  grub_history_add (buf);
+  if (hist_used == 0)
+    grub_history_add (buf);
 
   while ((key = GRUB_TERM_ASCII_CHAR (grub_getkey ())) != '\n' && key != '\r')
     {
@@ -641,7 +642,10 @@ grub_cmdline_get (const char *prompt, ch
                lpos = 0;
 
                if (histpos > 0)
-                 histpos--;
+                 {
+                   grub_history_replace (histpos, buf);
+                   histpos--;
+                 }
 
                cl_delete (llen);
                hist = grub_history_get (histpos);
@@ -656,7 +660,10 @@ grub_cmdline_get (const char *prompt, ch
                lpos = 0;
 
                if (histpos < hist_used - 1)
-                 histpos++;
+                 {
+                   grub_history_replace (histpos, buf);
+                   histpos++;
+                 }
 
                cl_delete (llen);
                hist = grub_history_get (histpos);
@@ -723,8 +730,6 @@ grub_cmdline_get (const char *prompt, ch
            }
          break;
        }
-
-      grub_history_replace (histpos, buf);
     }
 
   grub_putchar ('\n');
@@ -736,6 +741,13 @@ grub_cmdline_get (const char *prompt, ch
     while (buf[lpos] == ' ')
       lpos++;
 
+  histpos = 0;
+  if (grub_strlen (buf) > 0)
+    {
+      grub_history_replace (histpos, buf);
+      grub_history_add ("");
+    }
+  
   grub_memcpy (cmdline, buf + lpos, llen - lpos + 1);
 
   return 1;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]