Nmap Development mailing list archives
[PATCH] Flushing console input buffer in nmap_tty.cc (pt2)
From: Kris Katterjohn <katterjohn () gmail com>
Date: Fri, 12 Jan 2007 18:45:00 -0600
I was talking on the list here a while back about flushing the input buffer differently in nmap_tty.cc with tcflush() for UNIX, and possibly FlushConsoleInputBuffer() for Win32 (which kx found for me). Here's the original post: http://seclists.org/nmap-dev/2006/q3/0257.html I have applied a hopefully working patch to SVN (/nmap-exp/kris r4349), which I also attached. Here's the SVN log, which elaborates a little more: ------------------------------------------------------------------------ r4349 | kris | 2007-01-12 18:21:19 -0600 (Fri, 12 Jan 2007) | 1 line I'm trying to find a good way to flush the input queue in nmap_tty.cc for Windows (which I can't test). I'm using tcflush() for UNIX of course (which works very well and seems a good bit faster when I test it, like pressing a lot of buttons in a row), and I'm putting FlushConsoleInputBuffer() in for Win32 for now. Reading some docs and other code, I think the way I put it in now *should* work. Hopefully somebody on nmap-dev can test it out and we can put this in instead of the loop-and-read used now to flush it. It's not a big bottleneck or anything, but it should help out if we can get this Win32 thing working. ------------------------------------------------------------------------ So if any users can test this on Win32, that'd be great. And UNIX people please test too, and let me know if you have any problems (which you shouldn't :)). Thanks a lot, Kris Katterjohn
Index: nmap_tty.cc
===================================================================
--- nmap_tty.cc (revision 4348)
+++ nmap_tty.cc (revision 4349)
@@ -129,6 +129,13 @@
static int tty_getchar() { return _kbhit() ? _getch() : -1; }
static void tty_done() { return; }
+static void tty_flush(void)
+{
+ static HANDLE stdinput = GetStdHandle(STD_INPUT_HANDLE);
+
+ FlushConsoleInputBuffer(stdinput);
+}
+
#else
#if !defined(O_NONBLOCK) && defined(O_NDELAY)
#define O_NONBLOCK O_NDELAY
@@ -183,6 +190,15 @@
tty_fd = 0;
}
+static void tty_flush(void)
+{
+ /* we don't need to test for tty_fd==0 here because
+ * this isn't called unless we succeeded
+ */
+
+ tcflush(tty_fd, TCIFLUSH);
+}
+
/*
* Initializes the terminal for unbuffered non-blocking input. Also
* registers tty_done() via atexit(). You need to call this before
@@ -228,8 +244,7 @@
return false;
if ((c = tty_getchar()) >= 0) {
- // Eat any extra keys (so they can't queue up and print forever)
- while (tty_getchar() >= 0);
+ tty_flush(); /* flush input queue */
// printf("You pressed key '%c'!\n", c);
if (c == 'v') {
_______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://SecLists.Org
Current thread:
- [PATCH] Flushing console input buffer in nmap_tty.cc (pt2) Kris Katterjohn (Jan 12)
- Re: [PATCH] Flushing console input buffer in nmap_tty.cc (pt2) Kris Katterjohn (Jan 31)
- Re: [PATCH] Flushing console input buffer in nmap_tty.cc (pt2) Kris Katterjohn (Feb 01)
- Re: [PATCH] Flushing console input buffer in nmap_tty.cc (pt2) Kris Katterjohn (Jan 31)
