[Top][All Lists]
[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;