The branch main has been updated by rlibby:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d8404b7ec36d4974e7ac586df1d74be4ef6b141e

commit d8404b7ec36d4974e7ac586df1d74be4ef6b141e
Author:     Ryan Libby <[email protected]>
AuthorDate: 2021-02-24 23:56:16 +0000
Commit:     Ryan Libby <[email protected]>
CommitDate: 2021-02-24 23:56:16 +0000

    ddb: just move cursor when the lexer backs up
    
    Get rid of db_look_char because it's not compatible with db_get_line().
    This fixes the following issue:
    
    db> script lockinfo=show alllocks
    db> run lockinfo
    db:0:lockinfo> how alllocks
    No such command; use "help" to list available commands
    
    Reported by:    markj
    Reviewed by:    markj
    Sponsored by:   Dell EMC Isilon
    Differential Revision:  https://reviews.freebsd.org/D28725
---
 sys/ddb/db_lex.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/sys/ddb/db_lex.c b/sys/ddb/db_lex.c
index 457790ee8605..215e7cd7f2ab 100644
--- a/sys/ddb/db_lex.c
+++ b/sys/ddb/db_lex.c
@@ -97,18 +97,12 @@ db_flush_line()
        db_endlp = db_line;
 }
 
-static int     db_look_char = 0;
-
 static int
 db_read_char(void)
 {
        int     c;
 
-       if (db_look_char != 0) {
-           c = db_look_char;
-           db_look_char = 0;
-       }
-       else if (db_lp >= db_endlp)
+       if (db_lp >= db_endlp)
            c = -1;
        else
            c = *db_lp++;
@@ -116,10 +110,22 @@ db_read_char(void)
 }
 
 static void
-db_unread_char(c)
-       int c;
+db_unread_char(int c)
 {
-       db_look_char = c;
+
+       if (c == -1) {
+               /* Unread EOL at EOL is okay. */
+               if (db_lp < db_endlp)
+                       db_error("db_unread_char(-1) before end of line\n");
+       } else {
+               if (db_lp > db_line) {
+                       db_lp--;
+                       if (*db_lp != c)
+                               db_error("db_unread_char() wrong char\n");
+               } else {
+                       db_error("db_unread_char() at beginning of line\n");
+               }
+       }
 }
 
 static int     db_look_token = 0;
@@ -155,7 +161,6 @@ void
 db_flush_lex(void)
 {
        db_flush_line();
-       db_look_char = 0;
        db_look_token = 0;
 }
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to