fix KEY_UP/KEY_DOWN word jump
authorHarald Hoyer <harald@redhat.com>
Fri, 29 Jun 2012 16:43:55 +0000 (18:43 +0200)
committerHarald Hoyer <harald@redhat.com>
Fri, 29 Jun 2012 16:44:59 +0000 (18:44 +0200)
gummiboot.c

index 66aee4e..8a9ca88 100644 (file)
@@ -187,25 +187,28 @@ static BOOLEAN edit_line(CHAR16 *line_in, CHAR16 **line_out, UINTN x_max, UINTN
                         }
                         continue;
                 case SCAN_UP:
-                        while(line[cursor] && line[cursor] == ' ') {
-                                cursor--;
-                                if (first > 0)
+                        while((first + cursor) && line[first + cursor] == ' ') {
+                                if (cursor > 0)
+                                        cursor--;
+                                else if (first > 0)
                                         first--;
                         }
-                        while(cursor && line[cursor] && line[cursor] != ' ') {
-                                cursor--;
-                                if (first > 0)
+                        while((first + cursor) && line[first + cursor] != ' ') {
+                                if (cursor > 0)
+                                        cursor--;
+                                else if (first > 0)
                                         first--;
                         }
-                        while(line[cursor] && line[cursor] == ' ') {
-                                cursor--;
-                                if (first > 0)
+                        while((first + cursor) && line[first + cursor] == ' ') {
+                                if (cursor > 0)
+                                        cursor--;
+                                else if (first > 0)
                                         first--;
                         }
                         uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, cursor, y_pos);
                         continue;
                 case SCAN_DOWN:
-                        while(line[cursor] && line[cursor] == ' ') {
+                        while(line[first + cursor] && line[first + cursor] == ' ') {
                                 if (first + cursor == len)
                                         break;
                                 if (cursor+2 < x_max)
@@ -213,7 +216,7 @@ static BOOLEAN edit_line(CHAR16 *line_in, CHAR16 **line_out, UINTN x_max, UINTN
                                 else if (first + cursor < len)
                                         first++;
                         }
-                        while(line[cursor] && line[cursor] != ' ') {
+                        while(line[first + cursor] && line[first + cursor] != ' ') {
                                 if (first + cursor == len)
                                         break;
                                 if (cursor+2 < x_max)
@@ -221,7 +224,7 @@ static BOOLEAN edit_line(CHAR16 *line_in, CHAR16 **line_out, UINTN x_max, UINTN
                                 else if (first + cursor < len)
                                         first++;
                         }
-                        while(line[cursor] && line[cursor] == ' ') {
+                        while(line[first + cursor] && line[first + cursor] == ' ') {
                                 if (first + cursor == len)
                                         break;
                                 if (cursor+2 < x_max)