kdb: support new lines without carriage returns
authorColin Cross <ccross@android.com>
Thu, 15 Mar 2012 02:26:53 +0000 (19:26 -0700)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:52:21 +0000 (13:52 -0800)
kdb expects carriage returns through the serial port to terminate
commands.  Modify it to accept the first seen carriage return or
new line as a terminator, but not treat \r\n as two terminators.

Change-Id: I06166017e7703d24310eefcb71c3a7d427088db7
Signed-off-by: Colin Cross <ccross@android.com>
kernel/debug/kdb/kdb_io.c

index fc1ef736253c79954686d018a2deca4c86300fa6..0b891286a150c8535454a0be774180016c7a5536 100644 (file)
@@ -216,7 +216,7 @@ static char *kdb_read(char *buffer, size_t bufsize)
        int i;
        int diag, dtab_count;
        int key;
-
+       static int last_crlf;
 
        diag = kdbgetintenv("DTABCOUNT", &dtab_count);
        if (diag)
@@ -237,6 +237,9 @@ poll_again:
                return buffer;
        if (key != 9)
                tab = 0;
+       if (key != 10 && key != 13)
+               last_crlf = 0;
+
        switch (key) {
        case 8: /* backspace */
                if (cp > buffer) {
@@ -254,7 +257,12 @@ poll_again:
                        *cp = tmp;
                }
                break;
-       case 13: /* enter */
+       case 10: /* new line */
+       case 13: /* carriage return */
+               /* handle \n after \r */
+               if (last_crlf && last_crlf != key)
+                       break;
+               last_crlf = key;
                *lastchar++ = '\n';
                *lastchar++ = '\0';
                if (!KDB_STATE(KGDB_TRANS)) {