Nmap Development mailing list archives

Re: [PATCH] Flush console input queue differently in nmap_tty.cc


From: kx <kxmail () gmail com>
Date: Tue, 22 Aug 2006 22:28:01 -0400

Will FlushConsoleInputBuffer work?

http://windowssdk.msdn.microsoft.com/en-us/library/ms683147.aspx

Sorry I don't have time to try it myself.

-kx

On 8/22/06, Kris Katterjohn <kjak () ispwest com> wrote:
This uses tcflush() in tty_getchar() under the !WIN32 section and does
the "flush loop" inside tty_getchar() in the WIN32 section. It's
definitely better for the UNIX part, and is probably better for WIN32
because only _getch() is looped instead of the whole tty_getchar().

I tried to find something like tcflush() for Windows, but I didn't see
anything. Maybe kx knows of something.

It's a diff against 4.20ALPHA4.

Thanks,
Kris Katterjohn


--- x/nmap_tty.cc       2006-03-08 15:45:01.000000000 -0600
+++ y/nmap_tty.cc       2006-08-22 18:26:07.000000000 -0500
@@ -126,7 +126,21 @@ extern NmapOps o;

 // Microsoft's runtime makes this fairly simple. :)
 void tty_init() { return; }
-static int tty_getchar() { return _kbhit() ? _getch() : -1; }
+
+static int tty_getchar()
+{
+       if (_kbhit()) {
+               int c = _getch();
+
+               /* flush input queue */
+               while (_getch() >= 0);
+
+               return c;
+       }
+
+       return -1;
+}
+
 static void tty_done() { return; }

 #else
@@ -167,6 +181,10 @@ static int tty_getchar()
 #endif
               c = 0;
                numChars = read(tty_fd, &c, 1);
+
+               /* flush input queue */
+               tcflush(tty_fd, TCIFLUSH);
+
               if (numChars > 0) return c;
       }

@@ -232,9 +250,6 @@ bool keyWasPressed()
    return false;

  if ((c = tty_getchar()) >= 0) {
-    // Eat any extra keys (so they can't queue up and print forever)
-    while (tty_getchar() >= 0);
-
    // printf("You pressed key '%c'!\n", c);
    if (c == 'v') {
       o.verbose++;



_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org



_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org


Current thread: