grub-devel
[Top][All Lists]
Advanced

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

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


From: Vincent Pelletier
Subject: [PATCH] normal/cmdline.c : history contains empty lines
Date: Tue, 14 Dec 2004 08:08:09 +0100
User-agent: Mozilla Thunderbird 0.9 (X11/20041124)

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

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

Index: cmdline.c
===================================================================
RCS file: /cvsroot/grub/grub2/normal/cmdline.c,v
retrieving revision 1.10
diff -p -u -r1.10 cmdline.c
--- cmdline.c   13 Dec 2004 17:26:17 -0000      1.10
+++ cmdline.c   13 Dec 2004 22:35:46 -0000
@@ -102,26 +102,30 @@ grub_history_get (int pos)
 static void
 grub_history_add (char *s)
 {
-  /* Remove the oldest entry in the history to make room for a new
-     entry.  */
-  if (hist_used + 1 > hist_size)
-    {
-      hist_end--;
-      if (hist_end < 0)
-       hist_end = hist_size + hist_end;
+  /* avoid inserting empty lines & protect from mistakes */
+  if(s && grub_strlen(s))
+    {
+      /* Remove the oldest entry in the history to make room for a new
+         entry.  */
+      if (hist_used + 1 > hist_size)
+        {
+          hist_end--;
+          if (hist_end < 0)
+            hist_end = hist_size + hist_end;
 
-      grub_free (hist_lines[hist_end]);
-    }
-  else
-    hist_used++;
+          grub_free (hist_lines[hist_end]);
+        }
+      else
+        hist_used++;
 
-  /* Move to the next position.  */
-  hist_pos--;
-  if (hist_pos < 0)
-    hist_pos = hist_size + hist_pos;
+      /* Move to the next position.  */
+      hist_pos--;
+      if (hist_pos < 0)
+        hist_pos = hist_size + hist_pos;
 
-  /* Insert into history.  */
-  hist_lines[hist_pos] = grub_strdup (s);
+      /* Insert into history.  */
+      hist_lines[hist_pos] = grub_strdup (s);
+    }
 }
 
 /* Replace the history entry on position POS with the string S.  */
@@ -475,6 +479,7 @@ grub_cmdline_get (const char *prompt, ch
   auto void cl_delete (unsigned len);
   auto void cl_print (int pos, int c);
   auto void cl_set_pos (void);
+  const char empty_line[] = "";
 
   void cl_set_pos (void)
     {
@@ -556,8 +561,6 @@ grub_cmdline_get (const char *prompt, ch
   
   cl_insert (cmdline);
 
-  grub_history_add (buf);
-
   while ((key = GRUB_TERM_ASCII_CHAR (grub_getkey ())) != '\n' && key != '\r')
     {
       if (readline)
@@ -640,12 +643,16 @@ grub_cmdline_get (const char *prompt, ch
 
                lpos = 0;
 
+               cl_delete (llen);
                if (histpos > 0)
-                 histpos--;
+                  {
+                   histpos--;
+                   hist = grub_history_get (histpos);
+                  }
+                else
+                  hist = empty_line;
 
-               cl_delete (llen);
-               hist = grub_history_get (histpos);
-               cl_insert (hist);
+                cl_insert (hist);
 
                break;
              }
@@ -726,6 +733,7 @@ grub_cmdline_get (const char *prompt, ch
 
       grub_history_replace (histpos, buf);
     }
+  grub_history_add (buf);
 
   grub_putchar ('\n');
   grub_refresh ();

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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