[Top][All Lists]
[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 ();
signature.asc
Description: OpenPGP digital signature
- [PATCH] normal/cmdline.c : history contains empty lines,
Vincent Pelletier <=